生成QR二维码图片的简单示例

QR二维码的生成,在生成QR二维条码中已经提及。不过上次是通过网站生成的,缺点是对网站的依赖。下面做了个调用zxing core实现生成QR二维码图片的示例。另外还可以通过这个办法生成其他条形码格式图形。

对程序生成图片开始扫描:

image

扫描出结果:

image

在zxing的官方网站:

http://code.google.com/p/zxing

没有提到生成条码图片的功能。core组件是:

The core image decoding library, and test code

是图形解码库,和测试代码。

找了其他的一些java实现的条码生成图片库:

  • barbecus,开源的,不过只有一维码,而且自从2007年5月以后再没有更新;
  • aspose barcode,可以免费试用,不过如需去掉上面的aspose demo字样,需要购买授权。

其实zxing官网提供了一个在线生成条形码的网站,这说明它有生成条码图片的代码。于是到core组件的源代码里面看了一下,果然有。

zxing没有单独的core组件下载。需要先下载zip包,是所有项目的源代码。用ant编译core部分,得到core.jar文件即可。该组件库运行时不依赖其他类库。

我把core库上传到自己的maven repository上了,通过maven使用更方便。zxing没有提供maven库或者上传到公共库中。

<dependency>
  <groupId>com.google.zxing</groupId>
  <artifactId>zxing-core</artifactId>
  <version>1.5</version>
</dependency>

 

源代码见:

http://easymorse.googlecode.com/svn/tags/barcode-demo-0.1/

需要注意的是,在做QR编码的时候要增加字符集声明,这里是UTF-8,否则中文会出现乱码。

主要编码在这个方法里面:

public void generate(OutputStream outputStream) {
    QRCodeWriter writer = new QRCodeWriter();

    try {
        ByteMatrix matrix = writer.encode(content, BarcodeFormat.QR_CODE,
                width, height, hints);
        byte[][] matrixByte = matrix.getArray();

        BufferedImage bimg = new BufferedImage(width, height,
                BufferedImage.TYPE_BYTE_GRAY);
        byte[] linearbuffer = new byte[width * height];

        for (int y = 0,i=0; y < height; y++) {
            for (int x = 0; x < width; x++) {
                linearbuffer[i++] = matrixByte[y][x];
            }
        }
        bimg.getRaster().setDataElements(0, 0, width, height, linearbuffer);

        ImageIO.write(bimg, "png", outputStream);
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

PDF格式創作    发送文章为PDF   

2 Comments to “生成QR二维码图片的简单示例”

  1. By alao, 2011年09月7日 @ 14:31

    可否把源码发给我一份,网上好些文章都是用zxing的,多数的代码都运行不起来,先谢谢了!

  2. By zihuatanejo, 2011年12月1日 @ 12:04

    运行后,中文不能识别。关于UTF-8的字符集声明应该怎样加? 新手,查了些资料,没有解决,望可以解答,非常感谢!

这篇文章上的评论的 RSS feed TrackBack URI

Leave a Reply