Google Zxing - 生成二维码

Google Zxing

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

首先在网上搜索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 @Controller
14 @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"

时间: 2024-08-28 22:30:50

Google Zxing - 生成二维码的相关文章

使用Google zxing生成二维码

添加Maven依赖 <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.2.1</version> </dependency> <dependency> <groupId>com.google.zxing</groupId> <artifact

Android 基于google Zxing实现二维码的生成,识别和长按识别的效果

最近项目用到了二维码的生成与识别,之前没有接触这块,然后就上网搜了搜,发现有好多这方面的资源,特别是google Zxing对二维码的封装,实现的已经不错了,可以直接拿过来引用,下载了他们的源码后,只做了少少的改动,就是在Demo中增加了长按识别的功能,网上虽然也有长按识别的Demo,但好多下载下来却无法运行,然后总结了一下,加在了下面的Demo中. 如图所示,引用时直接把用红色圈起来的包放在你项目所对应的文件夹下,当然一些资源文件,比如string.xml里项目的引用你自己添加上就是 当然别忘

ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果

首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老美开发的,barcode4j对一维条形码处理的很好,而且支持的格式很多,当然也可以对二维码进行处理,效果个人感觉没有前两种好;ZXing对j2me,j2se,还有Android等支持也比较好,如果你是搞Android的或以后准备走Android,建议还是用zxing的比较好,毕竟都一个母亲(goole)生的,QRCode就不用说了吧,虽说技术无国界,但是国人还是有点.... 好,言归正传,java用ZXi

(转)ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果

场景:移动支付需要对二维码的生成与部署有所了解,掌握目前主流的二维码生成技术. 1 ZXing 生成二维码 首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老美开发的,barcode4j对一维条形码处理的很好,而且支持的格式很多,当然也可以对二维码进行处理,效果个人感觉没有前两种好;ZXing对j2me,j2se,还有Android等支持也比较好,如果你是搞Android的或以后准备走Android,建议还是用zxing的比较好,毕竟都一个母亲(gool

使用QRCode和zXing生成二维码

首先将需要的jar加到工程中 QRCode.jar.zxingcore-2.2.jar.javase-2.2.jar(也可不加,增加一个MatrixToImageWriter类也可以) package com.demo; import com.google.zxing.common.BitMatrix; import javax.imageio.ImageIO; import java.io.File; import java.io.OutputStream; import java.io.IO

java学习-zxing生成二维码矩阵的简单例子

这个例子需要使用google的开源项目zxing的核心jar包 core-3.2.0.jar 可以百度搜索下载jar文件 也可使用maven添加依赖 <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.2.0</version> </dependency> 最简单的生成二维码的方法,

zxing生成二维码设置边框颜色

真是研究了很久很久,满满的泪啊 zxing生成二维码,默认是可以增加空白边框的,但是并没有说设置边框颜色的属性. 其中增加空白边框的属性的一句话是: Map hints = new HashMap();hints.put(EncodeHintType.MARGIN, 1); 使用这句话设置边框,留出来的边框的颜色,就是二维码中主颜色的以外的那个颜色.通常主颜色都是黑色,背景色都是白色.如下二维码的边框的颜色,就是除了绿色以外的那个颜色. 所以并没有设置边框颜色的属性,那该怎么办?比如:要求使用P

利用google api生成二维码名片

利用google api生成二维码名片 二维条码/二维码可以分为堆叠式/行排式二维条码和矩阵式二维条码.堆叠式/行排式二维条码形态上是由多行短截的一维条码堆叠而成:矩阵式二维条码以矩阵的形式组成,在矩阵相应元素位置上用“点”表示二进制“1”,用“空”表示二进制“0”,“点”和“空”的排列组成代码. 堆叠式/行排式二维条码,如,Code 16K.Code 49.PDF417等. 矩阵式二维码,最流行莫过于QR CODE. 矩阵式二维码存储的数据量更大:可以包含数字.字符,及中文文本等混合内容:有一

Android基于Google Zxing实现二维码/条形码扫描、生成二维码/条形码

 二维码/条形码生成器 二维码/条形码扫描器 一.二维码与条形码工作原理 目前的很多应用上都有扫码功能,当时微信推出二维码扫码功能时,觉得imagine,通过一张简单的图片就能扫描添加还有,还有分享名片功能(也是一张二维码图片,识别扫描). 下面小编将通过文章主要介绍QRCode方面技术. QRCode是被广泛应用的一种二维码,解码速度快.二维码相对于条形码来说,二维码的存储数据量更大,空间利用率高,有一定的容错性. 二维码原理介绍: 二维码是用某种特定的几何图形按一定的规律在平面上分布的黑