多语言展示
当前在线:1041今日阅读:75今日分享:44

java用qrcode和zixing生成二维码的两种方式

java有很多生成二维码的方式,这里介绍一下用qrcode和zixing生成的代码
工具/原料

QRCode.jar和Qrcode_swetake.jar,zixing.jar包下载

方法/步骤
1

先去下载QRCode要用到的jar包

2

把这2个jar包添加到项目组,如果用到了maven的话,就可以直接在里面引用地址了,两种方式任何一种都可以,只要添加正确。

3

下面开始写代码package com.wmsDemo.QRCode;import java.awt.Color;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.File;import java.text.SimpleDateFormat;import java.util.Date;import javax.imageio.ImageIO;import com.swetake.util.Qrcode;public class QRCodeEncoderHandler { public void encoderQRCode(String content, String imgPath) {         try {             Qrcode qrcodeHandler = new Qrcode();          // 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小             qrcodeHandler.setQrcodeErrorCorrect('H');             qrcodeHandler.setQrcodeEncodeMode('B');             qrcodeHandler.setQrcodeVersion(5);             System.out.println(content); //            int imgSize = 67 + 12 * (size - 1);            byte[] contentBytes = content.getBytes('gb2312');             BufferedImage bufImg = new BufferedImage(115, 115,                     BufferedImage.TYPE_INT_RGB);             Graphics2D gs = bufImg.createGraphics();             gs.setBackground(Color.WHITE);             gs.clearRect(0, 0, 115, 115);             // 设定图像颜色> BLACK             gs.setColor(Color.BLACK);             // 设置偏移量 不设置可能导致解析出错             int pixoff = 2;             // 输出内容> 二维码             if (contentBytes.length > 0 && contentBytes.length < 800) {                 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) {      //取当前时间为图片名称 带毫秒的     SimpleDateFormat sdf =   new SimpleDateFormat('yyyyMMddHHmmssSSS' ); Date d=new Date(); String str=sdf.format(d);        String imgPath = 'D:/QRCode/twocode/'+str+'.png';         String content= '这是测试';        QRCodeEncoderHandler handler = new QRCodeEncoderHandler();         handler.encoderQRCode(content, imgPath);         System.out.println('imgPath:'+imgPath);        System.out.println('encoder QRcode success');     }  }

4

上面就是qrcode生成二维码的方式了,下面介绍下用zixing生成二维码的方式。

5

package com.wmsDemo.QRCode;  import com.google.zxing.common.BitMatrix;       import javax.imageio.ImageIO;   import java.io.File;   import java.io.OutputStream;   import java.io.IOException;   import java.awt.image.BufferedImage;           public final class MatrixToImageWriter {         private static final int BLACK = 0xFF000000;     private static final int WHITE = 0xFFFFFFFF;         private MatrixToImageWriter() {}               public static BufferedImage toBufferedImage(BitMatrix matrix) {       int width = matrix.getWidth();       int height = matrix.getHeight();       BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);       for (int x = 0; x < width; x++) {         for (int y = 0; y < height; y++) {           image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);         }       }       return image;     }         public static void writeToFile(BitMatrix matrix, String format, File file)         throws IOException {       BufferedImage image = toBufferedImage(matrix);       if (!ImageIO.write(image, format, file)) {         throw new IOException('Could not write an image of format ' + format + ' to ' + file);       }     }               public static void writeToStream(BitMatrix matrix, String format, OutputStream stream)         throws IOException {       BufferedImage image = toBufferedImage(matrix);       if (!ImageIO.write(image, format, stream)) {         throw new IOException('Could not write an image of format ' + format);       }     }       }

6

package com.wmsDemo.QRCode;import java.io.File;import java.util.HashMap;import java.util.Map;import com.google.zxing.BarcodeFormat;import com.google.zxing.EncodeHintType;import com.google.zxing.MultiFormatWriter;import com.google.zxing.common.BitMatrix;   public class Test {         /**      * @param args      * @throws Exception       */     public static void main(String[] args){      try {        String content = '这是测试xing二维码生成'; //        String path = 'D:/tt';        String path = 'D:/java/apache-tomcat-7.0.47/webapps/wmsDemo/QRCode';        MultiFormatWriter multiFormatWriter = new MultiFormatWriter();        Map hints = new HashMap();          //内容所使用编码          hints.put(EncodeHintType.CHARACTER_SET, 'gb2312');          BitMatrix bitMatrix = multiFormatWriter.encode(content,BarcodeFormat.QR_CODE, 200, 200, hints);          //生成二维码          File outputFile = new File(path,'14.jpg');         MatrixToImageWriter.writeToFile(bitMatrix, 'jpg', outputFile);   } catch (Exception e) {     e.printStackTrace(); }     }     }

7

通过上面的main方法测试可以看到二维码已经生成成功,并且扫描成功,好多参数如果有需要可以自己去设置

注意事项

注意编码格式

推荐信息