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

真是研究了很久很久,满满的泪啊

zxing生成二维码,默认是可以增加空白边框的,但是并没有说设置边框颜色的属性。

其中增加空白边框的属性的一句话是:

Map hints = new HashMap();
hints.put(EncodeHintType.MARGIN, 1);

使用这句话设置边框,留出来的边框的颜色,就是二维码中主颜色的以外的那个颜色。通常主颜色都是黑色,背景色都是白色。如下二维码的边框的颜色,就是除了绿色以外的那个颜色。

所以并没有设置边框颜色的属性,那该怎么办?
比如:要求使用POI把二维码放到Excel中,但是不能占了Excel的边框,而是要内嵌进去。
刚开始做出来的效果是:

最后需要修改成的效果是:

最后找到的解决方案是,重写它的方法:MatrixToImageWriter.toBufferedImage(bitMatrix);

页面的调用点为:

1 MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
2 Map hints = new HashMap();
3 hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
4 hints.put(EncodeHintType.MARGIN, "0");
5 hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
6 BitMatrix bitMatrix = multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, 100, 100, hints);
7 BufferedImage qrPic = null;
8 qrPic = MatrixToImageWriter.toBufferedImage(bitMatrix);

初始方法为:

 1 public static BufferedImage toBufferedImage(BitMatrix matrix) {
 2   int width = matrix.getWidth();
 3   int height = matrix.getHeight();
 4   BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
 5   for (int x = 0; x < width; x++) {
 6     for (int y = 0; y < height; y++) {
 7       image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);
 8     }
 9   }
10   return image;
11 }

重写后为:

 1 public static BufferedImage toBufferedImageCustom(BitMatrix matrix) {
 2 //二维码边框的宽度,默认二维码的宽度是100,经过多次尝试后自定义的宽度
 3   int left = 3;
 4   int right = 4;
 5   int top = 2;
 6   int bottom = 2;
 7
 8 //1、首先要自定义生成边框
 9   int[] rec = matrix.getEnclosingRectangle();   //获取二维码图案的属性
10   int resWidth = rec[2] + left + right;
11   int resHeight = rec[3] + top + bottom;
12
13   BitMatrix matrix2 = new BitMatrix(resWidth, resHeight); // 按照自定义边框生成新的BitMatrix
14   matrix2.clear();
15   for(int i=left+1; i < resWidth-right; i++){   //循环,将二维码图案绘制到新的bitMatrix中
16     for(int j=top+1; j < resHeight-bottom; j++){
17       if(matrix.get(i-left + rec[0], j - top + rec[1])){
18         matrix2.set(i,j);
19       }
20     }
21   }
22
23   int width = matrix2.getWidth();
24   int height = matrix2.getHeight();
25
26 //2、为边框设置颜色
27   BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
28   for (int x = 0; x < width; x++) {
29     for (int y = 0; y < height; y++) {
30       if(x<left || x> width-right|| y< top || y>height-bottom){
31         image.setRGB(x, y,BLACK);    //为了与Excel边框重合,设置二维码边框的颜色为黑色
32       }else{
33         image.setRGB(x, y, matrix2.get(x, y) ? BLACK : WHITE);
34       }
35     }
36   }
37   return image;
38 }

原创文章,欢迎转载,转载请注明出处!

时间: 2024-10-04 00:30:29

zxing生成二维码设置边框颜色的相关文章

提高zxing生成二维码的容错率及zxing生成二维码的边框设置

最近做了一个项目要生成二维码,跟几年前不同,最近大家都喜欢在二维码中间加logo. 加logo倒是不难,两个图片叠一起就是了,但是遇到一个新问题,logo加得太大的话,会导致二维码扫描不出来;加的太小则不怎么明显. 上网看看网上在线生成二维码的地方,发现都有容错率的设置,从7%-30%,容错率越高,二维码的有效像素点就越多. 由于我们使用的是zxing,所以我们需要看看怎么设置zxing的二维码容错率. 翻阅了zxing的源码,在QRCodeWriter.java中有这么一段: 1 ErrorC

使用zxing生成二维码,边框自定义宽度

本人语言组织能力较弱,直接上代码加注释. 1.基本方法 //二维码容错率,分四个等级:H.L .M. Q ErrorCorrectionLevel level = ErrorCorrectionLevel.H; String qrName = "test.png"; //生成二维码图片名称 String targetPath = ServletActionContext.getServletContext().getRealPath("/");  //不解释 Fil

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> 最简单的生成二维码的方法,

Java通过Zxing生成二维码

今天,要完成一个批量生成二维码的工作,并将生成好的二维码与另外一张底图拼接,生成一张新图. Java生成二维码主要的sdk为,qrcode和zxing,二者差别不大,这里采用了zxing. 首先,直接使用其core.jar,然后实现MatrixToImageWriter类. 在使用zxing时,我们发现默认生成的白边太大,想进行修改,通过updateBit方法进行指定白边的宽度.在修改完其白边后,会影响默认设置的二维码大小,通过zoomInImage方法进行修复. 在合成两张图片时,通过Smal

Android 使用zxing生成二维码的方法

public void createQRImage(String url) { try { // 判断URL合法性 if (url == null || "".equals(url) || url.length() < 1) { return; } Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>(); hints.put(EncodeHintTy

Android:使用ZXing生成二维码(支持加入Logo图案)

ZXing是谷歌的一个开源库.能够用来生成二维码.扫描二维码.本文所介绍的是第一部分. 首先上效果图: ZXing相关各种文件官方下载地址:https://github.com/zxing/zxing/releases 或者在这里下载(仅仅有本项目所用的jar包,版本:3.2.0):链接: http://pan.baidu.com/s/1hq3s5EW password: mvg7 1.生成二维码的工具类 /** * 二维码生成工具类 */ public class QRCodeUtil { /