qrcode二维码生成/解析

来源:互联网 发布:大数据平台建设目标 编辑:程序博客网 时间:2024/04/28 07:36

开源的二维码生成/解析包有google的zxing和qrcode,之前用zxing写的二维码生成方法生成的二维码用手机无法识别,昨天用qrcode开源包写个了简单的二维码生成方法,生成的二维码可以用手机扫描识别。

package com.lmg.qrcode.test;import java.awt.Color;import java.awt.Graphics2D;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;import com.swetake.util.Qrcode;public class QrCodeTest {    public static void main(String[] args) {        String content = "http://52smart.taobao.com welcome to my shop";        String imgPath = "my_logo.jpg";        encoderQrCode(content, imgPath);        System.out.println(decodeQrCode(imgPath));    }        /**     * 生成二维码(QRCode)图片     * @param content     * @param imgPath     */      public static void encoderQrCode(String content, String imgPath) {          try {               Qrcode qrcode = new Qrcode();              qrcode.setQrcodeErrorCorrect('M');              qrcode.setQrcodeEncodeMode('B');              qrcode.setQrcodeVersion(7);               byte[] contentBytes = content.getBytes("utf-8");               BufferedImage bufImg = new BufferedImage(200, 200, BufferedImage.TYPE_INT_RGB);               Graphics2D gs = bufImg.createGraphics();               gs.setBackground(Color.WHITE);              gs.clearRect(0, 0, 200, 200);               // 设定图像颜色 > BLACK              gs.setColor(Color.BLACK);               // 设置偏移量 不设置可能导致解析出错              int pixoff = 2;              // 输出内容 > 二维码              if (contentBytes.length > 0 && contentBytes.length < 200) {                  boolean[][] codeOut = qrcode.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();          }      }          public static String decodeQrCode(String imgPath) {         // QRCode 二维码图片的文件          File imageFile = new File(imgPath);           BufferedImage bufImg = null;          String result = null;          try {              bufImg = ImageIO.read(imageFile);               QRCodeDecoder decoder = new QRCodeDecoder();              result = new String(decoder.decode(new MyQrCodeImage(bufImg)));          } catch (IOException e) {              e.printStackTrace();          } catch (DecodingFailedException dfe) {              dfe.printStackTrace();          }          return result;      }}class MyQrCodeImage implements QRCodeImage {    private BufferedImage bufImg;        public MyQrCodeImage(BufferedImage bufImg) {        this.bufImg = bufImg;    }    @Override    public int getHeight() {        return bufImg.getHeight();    }    @Override    public int getPixel(int x, int y) {        return bufImg.getRGB(x, y);    }    @Override    public int getWidth() {        return bufImg.getWidth();    }}
生成的二维码图片如下:


解析出来的结果如下:



原创粉丝点击