Java는 QR 코드 QRCode의 인코딩 및 디코딩을 구현합니다
관련된 주요 클래스 라이브러리 중 일부는 누구나 쉽게 다운로드할 수 있습니다.
인코딩 lib: Qrcode_swetake.jar(공식 웹사이트 소개- - http://www.swetake.com/qr/index-e.html) ~ 🎜>
【1】. 인코딩: Java 코드 QRCodeEncoderHandler.javapackage 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 코드 이미지를 디코딩할 수도 있습니다. 자세한 내용은 아래 디코딩에 대한 내용을 참조하세요. 【2】.디코딩: Java 코드 QRCodeDecoderHandler.javapackage 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 중국어 웹사이트를 주목하세요!