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>

最简单的生成二维码的方法,

   /**
     * 生成二维码图片
     * @param dir        存放的目录
     * @param fileName  文件名要以.jpg结尾
     * @param content  这个内容可以是文字或链接
     */
    public void generateQRCode(String dir, String fileName, String content) {
        //生成二维码的宽高
        int size = 200;
        Map<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
        // 指定纠错等级
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);
        // 指定编码格式
        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");

        try {
            //encode(String contents, BarcodeFormat format, int width, int height, Map<EncodeHintType, ?> hints)
            BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, size, size, hints);

            bitMatrix = updateBit(bitMatrix, 8);
            File file1 = new File(dir);
            if (!file1.exists()) {
                file1.mkdirs();
            }

            //将生成的矩阵像素写入到指定文件中,这里是以jpg结尾
            MatrixToImageWriter.writeToStream(bitMatrix, "jpg", new FileOutputStream(dir + "/"+fileName));
            System.out.println("创建成功");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (WriterException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

这里生成的二维码留的白色边距有点多,想要适当减小边距,看下面

如果不想边距太大,我们可以取得二维码的真是宽高,然后新建立一个空的BitMatrix对象来放这个二维码即可

margin为白色边距的大小

private static BitMatrix updateBit(BitMatrix matrix, int margin) {

        int tempM = margin * 2;

        //left,top,width,height
        // 0    1    2     3   对应的数组下标
        //这里的width和height是指去除白色边框后的真实的二维码长宽,而不是图片长宽。
        int[] rec = matrix.getEnclosingRectangle(); // 获取二维码图案的属性

        int resWidth = rec[2] + tempM;//真实宽度加左右边距
        int resHeight = rec[3] + tempM;

        BitMatrix resMatrix = new BitMatrix(resWidth, resHeight); // 按照自定义边框生成新的BitMatrix

        resMatrix.clear();

        for (int i = margin; i < resWidth - margin; i++) { // 循环,将二维码图案绘制到新的bitMatrix中

            for (int j = margin; j < resHeight - margin; j++) {

                if (matrix.get(i - margin + rec[0], j - margin + rec[1])) {

                    resMatrix.set(i, j);

                }

            }

        }

        return resMatrix;
    }

生成二维码

这样白色边距就不会太大了,好看多了

后面还有将二维码嵌入到海报,或者其他活动图片上的方法,直接上代码

public void insertQRCode(BufferedImage zxingImage, String backgroundPath) {
        InputStream dest = null;

        try {
            dest = new FileInputStream(backgroundPath);
            BufferedImage image = ImageIO.read(dest);

            Graphics g = image.getGraphics();

            int leftMargin = image.getWidth() - zxingImage.getWidth() - 10;
            int topMargin = image.getHeight() - zxingImage.getHeight() - 10;
            g.drawImage(zxingImage, leftMargin, topMargin, zxingImage.getWidth(), zxingImage.getHeight(), null);
            ImageIO.write(image, "jpg", new FileOutputStream("D:\\QRCode\\zengmei.jpg"));
            System.out.println("创建成功");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

还有修改二维码线条颜色,在二维码中插入logo图标等方法,下次继续补充。

谢谢浏览

参考链接:

https://www.cnblogs.com/qwqwQAQ/p/8118109.html

JAVA实现基于ZXing的二维码自动生成与图片合成

https://blog.csdn.net/mruso/article/details/79744670

Java通过Zxing生成二维码

http://blog.51cto.com/9732420/1742136

开源项目地址

https://github.com/zxing/zxing

原文地址:https://www.cnblogs.com/gne-hwz/p/9445466.html

时间: 2024-11-05 11:45:51

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

Java通过Zxing生成二维码

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

Java利用Zxing生成二维码

Zxing是Google提供的关于条码(一维码.二维码)的解析工具,提供了二维码的生成与解析的方法,现在我简单介绍一下使用Java利用Zxing生成与解析二维码 1.二维码的生成 1.1 将Zxing-core.jar 包加入到classpath下. 1.2 二维码的生成需要借助MatrixToImageWriter类,该类是由Google提供的,可以将该类拷贝到源码中,这里我将该类的源码贴上,可以直接使用. import com.google.zxing.common.BitMatrix; i

java 通过zxing生成二维码

1.基本类提供二维码生成工具类 package com.green.util; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.OutputStream; import javax.imageio.ImageIO; import com.google.zxing.com

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

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

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

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

Java根据链接生成二维码

Java根据链接生成二维码 相关 jar 包: core-3.1.0.jar 源码及 jar 包下载:http://files.cnblogs.com/files/liaolongjun/qrcode.zip 可直接运行: package llj.mf.utils; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.io.OutputStream; i

使用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

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

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

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

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