首页 > Java教程 > 正文

说到二维码,现在真是已经到处都是了,那么,什么是二维码?在Java中如何生成呢?

二维码 ,又称“二维条码”, 二维条形码最早发明于日本,它是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的,在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理。它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动 识别功能、及处理图形旋转变化等特点。

Java语言的话生成二维码有很多开发的jar包,如ZXing,QRCode,前者是谷歌开发的后者则是小日本开发的,这里的话我使用ZXing-2.2的开发包来弄 。

一、先下载ZXing开发包,这里用到的只是core那个jar包

  ZXing-2.2.jar开发包下载(密码:5S5P)

二、编写一个工具类,用于生成二维码

package com.csyor.test.zxing;

import javax.imageio.ImageIO;

import com.google.zxing.common.BitMatrix;

import java.io.File;
import java.io.OutputStream;
import java.io.IOException;
import java.awt.image.BufferedImage;

public final class MatrixToImageWriter {

    private static final int BLACK = 0xFF000000;
    private static final int WHITE = 0xFFFFFFFF;

    private MatrixToImageWriter() {
    }

    public static BufferedImage toBufferedImage(BitMatrix matrix) {
        int width = matrix.getWidth();
        int height = matrix.getHeight();
        BufferedImage image = new BufferedImage(width, height, 
                                                  BufferedImage.TYPE_INT_RGB);
        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);
            }
        }
        return image;
    }

    public static void writeToFile(BitMatrix matrix, String format, File file) 
                                                          throws IOException {
        BufferedImage image = toBufferedImage(matrix);
        if (!ImageIO.write(image, format, file)) {
            throw new IOException("Could not write an image of format " + 
                                                      format + " to " + file);
        }
        System.out.println("二维码图片生成成功");
    }

    public static void writeToStream(BitMatrix matrix, String format, 
                                     OutputStream stream) throws IOException {
        BufferedImage image = toBufferedImage(matrix);
        if (!ImageIO.write(image, format, stream)) {
            throw new IOException("Could not write an image of format "+format);
        }
    }

}

三、使用上面的工具类生成二维码

package com.csyor.test.zxing;

import java.io.File;
import java.util.Hashtable;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;

public class TestZxing {
    public static void main(String[] args) throws Exception {
        String text = "https://www.csyor.com";
        int width = 250;
        int height = 250;
        // 二维码的图片格式
        String format = "gif";
        Hashtable<EncodeHintType,String> hints = 
                                      new Hashtable<EncodeHintType,String>();
        // 内容所使用编码
        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
        BitMatrix bitMatrix = new MultiFormatWriter()
                  .encode(text, BarcodeFormat.QR_CODE, width, height, hints);
        // 生成二维码
        File outputFile = new File("d:" + File.separator + "csyor.com.gif");
        MatrixToImageWriter.writeToFile(bitMatrix, format, outputFile);
    }
}

以上内容来自于网络,如有侵权联系即删除。

猜你喜欢
发表评论

电子邮件地址不会被公开。 必填项已用*标注

评论信息

小歪仔回复2014-05-19 11:29

真的很好用呀~找了好久~thanks~ :razz: