首页 > 学院 > 开发设计 > 正文

Google Zxing

2019-11-15 01:09:45
字体:
来源:转载
供稿:网友
Google Zxing - 生成二维码Google Zxing

最近在某论坛上看到Zxing 这个插件 , 决定用用 !首先它是用于生成二维码的 , 类似于登录时的验证码 , 他也是从后台生成一张图片 , 只不过二维码图案涉及一定算法 , 并且有一定的规律 ,这些都是前辈们定好了 ,并且已经把这里面复杂的代码封装了 , 接下来的工作就简单了!相关文章:http://developer.51cto.com/art/201310/414082_all.htm

首先在网上搜索Zxing ,或者去 maven repository下载zxing jar!

1、手动添加如下代码(核心实现)

 1 package com.wisesoft.ztree.util; 2 import com.google.zxing.common.BitMatrix; 3 import javax.imageio.ImageIO; 4 import java.io.File; 5 import java.io.OutputStream; 6 import java.io.IOException; 7 import java.awt.image.BufferedImage; 8 public final class MatrixToImageWriter { 9     PRivate static final int BLACK = 0xFF000000;10     private static final int WHITE = 0xFFFFFFFF;11     private MatrixToImageWriter() {12     }13     public static BufferedImage toBufferedImage(BitMatrix matrix) {14         int width = matrix.getWidth();15         int height = matrix.getHeight();16         BufferedImage image = new BufferedImage(width, height,17                 BufferedImage.TYPE_INT_RGB);18         for (int x = 0; x < width; x++) {19             for (int y = 0; y < height; y++) {20                 image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);21             }22         }23         return image;24     }25     public static void writeToFile(BitMatrix matrix, String format, File file)26             throws IOException {27         BufferedImage image = toBufferedImage(matrix);28         if (!ImageIO.write(image, format, file)) {29             throw new IOException("Could not write an image of format "30                     + format + " to " + file);31         }32     }33     public static void writeToStream(BitMatrix matrix, String format,34             OutputStream stream) throws IOException {35         BufferedImage image = toBufferedImage(matrix);36         if (!ImageIO.write(image, format, stream)) {37             throw new IOException("Could not write an image of format "38                     + format);39         }40     }41 }42 43                     
MatrixToImageWriter

“matrix.get(x, y) ? BLACK : WHITE” MatrixToImageWriter 类是绘制图形的核心类 , 通过循环每一个像素点 , 并且询问BitMatrix.get(x,y)返回时true或者false 决定绘制黑白条纹

2、二维码规格定义部分

 1 package com.wisesoft.ztree.controller; 2 import java.io.IOException; 3 import javax.servlet.http.HttpServletRequest; 4 import javax.servlet.http.HttpServletResponse; 5 import org.springframework.stereotype.Controller; 6 import org.springframework.web.bind.annotation.RequestMapping; 7 import com.google.zxing.BarcodeFormat; 8 import com.google.zxing.MultiFormatWriter; 9 import com.google.zxing.WriterException;10 import com.google.zxing.common.BitMatrix;11 import com.wisesoft.ztree.util.MatrixToImageWriter;12 13 @Controller14 @RequestMapping("/qr")15 public class QRController {16     @RequestMapping("put")17     public void qr(HttpServletRequest req,HttpServletResponse resp) throws WriterException, IOException{18         String contents = "http://sqdd.myapp.com/myapp/QQteam/AndroidQQ/mobileqq_android.apk"; //二维码链接地址19         int width = 300;    //生成二维码宽度20         int height = 300;    //高度21         String format = "png"; //二维码文件格式 22         BitMatrix bitMatrix = new MultiFormatWriter().encode(contents, BarcodeFormat.QR_CODE, width, height); //xzing插件核心,将参数传入23         //MatrixToImageWriter.writeToFile(bitMatrix,format, new File("D://qq_download.png")); //将生成的二维码写入文件中24         MatrixToImageWriter.writeToStream(bitMatrix,format, resp.getOutputStream()); //将生成的二维码放入流中25         //MatrixToImageWriter.toBufferedImage(matrix); 26     }27 }
QRController

writeToStream 的三个参数 , 第一个是BitMatrix对象 ,第二个 是format为图片格式 ,第三个是一个输出流对象

如果format格式不对:

MatrixToImageWriter.writeToStream(bitMatrix,"aaaaa", resp.getOutputStream());

异常:

"Could not write an image of format aaaaa"


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表