java二维码生成-谷歌(Google.zxing)开源二维码生成的实例及介绍

 这里我们使用比特矩阵(位矩阵)的QR码编码在缓冲图片上画出二维码

  实例有以下一个传入参数

      OutputStream outputStream, 要存储的文件

      String content, 携带信息的内容

      int qrCodeSize, 图片大小

      String imageFormat 编码

  步骤:

  1.设置二维码的纠错级别参数

  //设置二维码纠错级别MAP
       Hashtable<EncodeHintType, ErrorCorrectionLevel> hintMap = new Hashtable<EncodeHintType, ErrorCorrectionLevel>(); 
       hintMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L); // 矫错级别

   2.创建比特矩阵

1 QRCodeWriter qrCodeWriter = new QRCodeWriter(); 
2 //创建比特矩阵(位矩阵)的QR码编码的字符串 
3 BitMatrix byteMatrix = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, qrCodeSize, qrCodeSize, hintMap); 
4 // 使BufferedImage勾画QRCode (matrixWidth 是行二维码像素点)
5 int matrixWidth = byteMatrix.getWidth();

  3.开始在缓冲图片中画二维码

 1  BufferedImage image = new BufferedImage(matrixWidth, matrixWidth, BufferedImage.TYPE_INT_RGB);  
 2             image.createGraphics();  
 3             Graphics2D graphics = (Graphics2D) image.getGraphics();  
 4             graphics.setColor(Color.WHITE);  
 5             graphics.fillRect(0, 0, matrixWidth, matrixWidth);  
 6             // 使用比特矩阵画并保存图像
 7             graphics.setColor(Color.BLACK);  
 8             for (int i = 0; i < matrixWidth; i++){
 9                 for (int j = 0; j < matrixWidth; j++){
10                     if (byteMatrix.get(i, j)){
11                         graphics.fillRect(i, j, 1, 1);  
12                     }
13                 }
14             }
15             ImageIO.write(image, imageFormat, outputStream);  

 二维码生成的工具类代码;

 1 package 。。。;
 2 
 3 import java.awt.Color;
 4 import java.awt.Graphics2D;
 5 import java.awt.image.BufferedImage;
 6 import java.io.File;
 7 import java.io.FileInputStream;
 8 import java.io.FileOutputStream;
 9 import java.io.IOException;
10 import java.io.InputStream;
11 import java.io.OutputStream;
12 import java.util.Hashtable;
13 
14 import javax.imageio.ImageIO;
15 
16 import com.google.zxing.BarcodeFormat;
17 import com.google.zxing.BinaryBitmap;
18 import com.google.zxing.EncodeHintType;
19 import com.google.zxing.LuminanceSource;
20 import com.google.zxing.ReaderException;
21 import com.google.zxing.Result;
22 import com.google.zxing.WriterException;
23 import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
24 import com.google.zxing.common.BitMatrix;
25 import com.google.zxing.common.HybridBinarizer;
26 import com.google.zxing.qrcode.QRCodeReader;
27 import com.google.zxing.qrcode.QRCodeWriter;
28 import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
29 
30 /**
31  * 二维码生成和读的工具类
32  *
33  */
34 public class QrCodeCreateUtil {
35     
36     /**
37      * 生成包含字符串信息的二维码图片
38      * @param outputStream 文件输出流路径
39      * @param content 二维码携带信息
40      * @param qrCodeSize 二维码图片大小
41      * @param imageFormat 二维码的格式
42      * @throws WriterException 
43      * @throws IOException 
44      */
45     public static boolean createQrCode(OutputStream outputStream, String content, int qrCodeSize, String imageFormat) throws WriterException, IOException{  
46             //设置二维码纠错级别MAP
47             Hashtable<EncodeHintType, ErrorCorrectionLevel> hintMap = new Hashtable<EncodeHintType, ErrorCorrectionLevel>();  
48             hintMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);  // 矫错级别  
49             QRCodeWriter qrCodeWriter = new QRCodeWriter();  
50             //创建比特矩阵(位矩阵)的QR码编码的字符串  
51             BitMatrix byteMatrix = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, qrCodeSize, qrCodeSize, hintMap);  
52             // 使BufferedImage勾画QRCode  (matrixWidth 是行二维码像素点)
53             int matrixWidth = byteMatrix.getWidth();  
54             BufferedImage image = new BufferedImage(matrixWidth-200, matrixWidth-200, BufferedImage.TYPE_INT_RGB);  
55             image.createGraphics();  
56             Graphics2D graphics = (Graphics2D) image.getGraphics();  
57             graphics.setColor(Color.WHITE);  
58             graphics.fillRect(0, 0, matrixWidth, matrixWidth);  
59             // 使用比特矩阵画并保存图像
60             graphics.setColor(Color.BLACK);  
61             for (int i = 0; i < matrixWidth; i++){
62                 for (int j = 0; j < matrixWidth; j++){
63                     if (byteMatrix.get(i, j)){
64                         graphics.fillRect(i-100, j-100, 1, 1);  
65                     }
66                 }
67             }
68             return ImageIO.write(image, imageFormat, outputStream);  
69     }  
70       
71     /**
72      * 读二维码并输出携带的信息
73      */
74     public static void readQrCode(InputStream inputStream) throws IOException{  
75         //从输入流中获取字符串信息
76         BufferedImage image = ImageIO.read(inputStream);  
77         //将图像转换为二进制位图源
78         LuminanceSource source = new BufferedImageLuminanceSource(image);  
79         BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));  
80         QRCodeReader reader = new QRCodeReader();  
81         Result result = null ;  
82         try {
83          result = reader.decode(bitmap);  
84         } catch (ReaderException e) {
85             e.printStackTrace();  
86         }
87         System.out.println(result.getText());  
88     }
89     /**
90      * 测试代码
91      * @throws WriterException 
92      */
93     public static void main(String[] args) throws IOException, WriterException {  
94         
95         createQrCode(new FileOutputStream(new File("d:\\qrcode.jpg")),"WE1231238239128sASDASDSADSDWEWWREWRERWSDFDFSDSDF123123123123213123",900,"JPEG");
96         readQrCode(new FileInputStream(new File("d:\\qrcode.jpg")));  
97     }  
98   
99 }  

 

 要是文章对你有用,随手点个赞哦

 

posted on 2017-01-17 16:22  HelloXF_jeff  阅读(49147)  评论(2编辑  收藏  举报