>  기사  >  Java  >  Java는 QR 코드 QRCode의 인코딩 및 디코딩과 샘플 분석을 구현합니다.

Java는 QR 코드 QRCode의 인코딩 및 디코딩과 샘플 분석을 구현합니다.

高洛峰
高洛峰원래의
2017-01-20 15:17:011784검색

Java는 QR 코드 QRCode의 인코딩 및 디코딩을 구현합니다

관련된 주요 클래스 라이브러리 중 일부는 누구나 쉽게 다운로드할 수 있습니다.

인코딩 lib: Qrcode_swetake.jar(공식 웹사이트 소개- - http://www.swetake.com/qr/index-e.html)                                                                                 ~             🎜>

【1】. 인코딩:

Java 코드 QRCodeEncoderHandler.java

package michael.qrcode; 
  
import java.awt.Color; 
import java.awt.Graphics2D; 
import java.awt.image.BufferedImage; 
import java.io.File; 
  
import javax.imageio.ImageIO; 
  
import com.swetake.util.Qrcode; 
  
/**
 * 二维码生成器
 * @blog http://sjsky.iteye.com
 * @author Michael
 */
public class QRCodeEncoderHandler { 
  
 /**
 * 生成二维码(QRCode)图片
 * @param content
 * @param imgPath
 */
 public void encoderQRCode(String content, String imgPath) { 
 try { 
  
 Qrcode qrcodeHandler = new Qrcode(); 
 qrcodeHandler.setQrcodeErrorCorrect('M'); 
 qrcodeHandler.setQrcodeEncodeMode('B'); 
 qrcodeHandler.setQrcodeVersion(7); 
  
 System.out.println(content); 
 byte[] contentBytes = content.getBytes("gb2312"); 
  
 BufferedImage bufImg = new BufferedImage(140, 140, 
  BufferedImage.TYPE_INT_RGB); 
  
 Graphics2D gs = bufImg.createGraphics(); 
  
 gs.setBackground(Color.WHITE); 
 gs.clearRect(0, 0, 140, 140); 
  
 // 设定图像颜色> BLACK 
 gs.setColor(Color.BLACK); 
  
 // 设置偏移量 不设置可能导致解析出错 
 int pixoff = 2; 
 // 输出内容> 二维码 
 if (contentBytes.length > 0 && contentBytes.length < 120) { 
 boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes); 
 for (int i = 0; i < codeOut.length; i++) { 
  for (int j = 0; j < codeOut.length; j++) { 
  if (codeOut[j][i]) { 
  gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3); 
  } 
  } 
 } 
 } else { 
 System.err.println("QRCode content bytes length = "
  + contentBytes.length + " not in [ 0,120 ]. "); 
 } 
  
 gs.dispose(); 
 bufImg.flush(); 
  
 File imgFile = new File(imgPath); 
  
 // 生成二维码QRCode图片 
 ImageIO.write(bufImg, "png", imgFile); 
  
 } catch (Exception e) { 
 e.printStackTrace(); 
 } 
  
 } 
  
 /**
 * @param args the command line arguments
 */
 public static void main(String[] args) { 
 String imgPath = "D:/test/twocode/Michael_QRCode.png"; 
  
 String content = "Hello 大大、小小,welcome to QRCode!"
 + "\nMyblog [ http://sjsky.iteye.com ]"
 + "\nEMail [ sjsky007@gmail.com ]" + "\nTwitter [ @suncto ]"; 
  
 QRCodeEncoderHandler handler = new QRCodeEncoderHandler(); 
 handler.encoderQRCode(content, imgPath); 
  
 System.out.println("encoder QRcode success"); 
 } 
}

실행 후 생성되는 QR코드 이미지는 다음과 같습니다.

이때, 휴대폰의 QR코드 스캔 소프트웨어를 이용하시면 됩니다. (저는 android snap QR을 사용합니다.) 코드) 테스트에 성공한 스크린샷은 다음과 같습니다. Java는 QR 코드 QRCode의 인코딩 및 디코딩과 샘플 분석을 구현합니다.

Java는 QR 코드 QRCode의 인코딩 및 디코딩과 샘플 분석을 구현합니다.

마음에 드는 친구들은 다운받아서 한번 만들어 보세요. 명함이나 좋아하는 것. 물론 Java는 QR 코드 이미지를 디코딩할 수도 있습니다. 자세한 내용은 아래 디코딩에 대한 내용을 참조하세요.

【2】.디코딩:

Java 코드 QRCodeDecoderHandler.java

package michael.qrcode; 
  
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
  
import javax.imageio.ImageIO; 
  
import jp.sourceforge.qrcode.QRCodeDecoder; 
import jp.sourceforge.qrcode.data.QRCodeImage; 
import jp.sourceforge.qrcode.exception.DecodingFailedException; 
  
/**
 * @blog http://sjsky.iteye.com
 * @author Michael
 */
public class QRCodeDecoderHandler { 
  
 /**
 * 解码二维码
 * @param imgPath
 * @return String
 */
 public String decoderQRCode(String imgPath) { 
  
 // QRCode 二维码图片的文件 
 File imageFile = new File(imgPath); 
  
 BufferedImage bufImg = null; 
 String decodedData = null; 
 try { 
 bufImg = ImageIO.read(imageFile); 
  
 QRCodeDecoder decoder = new QRCodeDecoder(); 
 decodedData = new String(decoder.decode(new J2SEImage(bufImg))); 
  
 // try { 
 // System.out.println(new String(decodedData.getBytes("gb2312"), 
 // "gb2312")); 
 // } catch (Exception e) { 
 // // TODO: handle exception 
 // } 
 } catch (IOException e) { 
 System.out.println("Error: " + e.getMessage()); 
 e.printStackTrace(); 
 } catch (DecodingFailedException dfe) { 
 System.out.println("Error: " + dfe.getMessage()); 
 dfe.printStackTrace(); 
 } 
 return decodedData; 
 } 
  
 /**
 * @param args the command line arguments
 */
 public static void main(String[] args) { 
 QRCodeDecoderHandler handler = new QRCodeDecoderHandler(); 
 String imgPath = "d:/test/twocode/Michael_QRCode.png"; 
 String decoderContent = handler.decoderQRCode(imgPath); 
 System.out.println("解析结果如下:"); 
 System.out.println(decoderContent); 
 System.out.println("========decoder success!!!"); 
 } 
  
 class J2SEImage implements QRCodeImage { 
 BufferedImage bufImg; 
  
 public J2SEImage(BufferedImage bufImg) { 
 this.bufImg = bufImg; 
 } 
  
 public int getWidth() { 
 return bufImg.getWidth(); 
 } 
  
 public int getHeight() { 
 return bufImg.getHeight(); 
 } 
  
 public int getPixel(int x, int y) { 
 return bufImg.getRGB(x, y); 
 } 
  
 } 
}

실행 결과는 다음과 같습니다(디코딩된 내용이 이전에 입력한 내용과 일치합니다). 🎜>

파싱 결과는 다음과 같습니다.

안녕 빅스몰 QRCode에 오신 것을 환영합니다!

마이블로그 [ http://sjsky.iteye.com ]

이메일 [ sjsky007@ gmail.com ]

Twitter [ @suncto ]

========디코더 성공!!!

위는 구현입니다. QR 코드 Java의 QRCode 인코딩 및 디코딩 정보가 정리되었으며 향후 관련 정보가 추가될 예정입니다. 이 사이트에 대한 귀하의 지원에 감사드립니다!

QR 코드의 더 많은 Java 구현 QRCode 인코딩 및 디코딩과 샘플 분석 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.