利用zxing开源工具生成二维码图片

来源:互联网 发布:maven 下载源码 编辑:程序博客网 时间:2024/05/29 03:50

ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,该工具可实现的条形码编码和解码。
如下是利用ZXing工具生成与解析二维码图片的具体例子
一 :须要的jar包
1. zxing-core.jar 生成二维码的开源工具包。
2. zxing-javase.jar 解析二维码图片时候BufferedImageLuminanceSource类所在的jar包。

二 :代码事例

package com.hyf.qrcode;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.util.Hashtable;import java.util.Map;import javax.imageio.ImageIO;import com.google.zxing.BarcodeFormat;import com.google.zxing.BinaryBitmap;import com.google.zxing.DecodeHintType;import com.google.zxing.EncodeHintType;import com.google.zxing.LuminanceSource;import com.google.zxing.MultiFormatReader;import com.google.zxing.MultiFormatWriter;import com.google.zxing.ReaderException;import com.google.zxing.Result;import com.google.zxing.client.j2se.BufferedImageLuminanceSource;import com.google.zxing.common.BitMatrix;import com.google.zxing.common.HybridBinarizer;/** * 利用zxing开源工具生成二维码QRCode *  * @date 2012-10-26 * @author xhw *  */public class QRCodeTest {    private static final int BLACK = 0xff000000;    private static final int WHITE = 0xFFFFFFFF;    /**     * @param args     */    public static void main(String[] args) {        QRCodeTest test = new QRCodeTest();        String filePostfix="png";//二维码图片格式        File file = new File("F://test_QR_CODE."+filePostfix);//二维码图片存放路径        //生成二维码图片        test.encode("二维码内容", file,filePostfix, BarcodeFormat.QR_CODE, 5000, 5000);        //读取二维码图片内容        test.decode(file);    }    /**     *  生成QRCode二维码<br>      *  在编码时需要将com.google.zxing.qrcode.encoder.Encoder.java中的<br>     *  static final String DEFAULT_BYTE_MODE_ENCODING = "ISO8859-1";<br>     *  修改为UTF-8,否则中文编译后解析不了<br>     * @param contents 二维码的内容     * @param file 二维码保存的路径,如:C://test_QR_CODE.png     * @param filePostfix 生成二维码图片的格式:png,jpeg,gif等格式     * @param format qrcode码的生成格式     * @param width 图片宽度     * @param height 图片高度     * @param hints     */    public void encode(String contents, File file,String filePostfix, BarcodeFormat format, int width, int height) {        try {            Map<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();            //设置编码格式            hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");            //生成一个矩阵            BitMatrix bitMatrix = new MultiFormatWriter().encode(contents, format, width, height, hints);            //生成二维码图片            writeToFile(bitMatrix, filePostfix, file);        } catch (Exception e) {            e.printStackTrace();        }    }    /**     * 生成二维码图片<br>     *      * @param matrix     * @param format     *            图片格式     * @param file     *            生成二维码图片位置     * @throws IOException     */    public static void writeToFile(BitMatrix matrix, String format, File file) throws IOException {        //生成图片        BufferedImage image = toBufferedImage(matrix);        //输出图片        ImageIO.write(image, format, file);    }    /**     * 生成二维码内容<br>     *      * @param matrix     * @return     */    public static BufferedImage toBufferedImage(BitMatrix matrix) {        int width = matrix.getWidth();        int height = matrix.getHeight();        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);        for (int x = 0; x < width; x++) {            for (int y = 0; y < height; y++) {                image.setRGB(x, y, matrix.get(x, y) == true ? BLACK : WHITE);            }        }        return image;    }    /**     * 解析QRCode二维码     */    @SuppressWarnings("unchecked")    public void decode(File file) {        try {            BufferedImage image;            try {                image = ImageIO.read(file);                if (image == null) {                    System.out.println("Could not decode image");                }                LuminanceSource source = new BufferedImageLuminanceSource(image);                BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));                Result result;                @SuppressWarnings("rawtypes")                Hashtable hints = new Hashtable();                //解码设置编码方式为:utf-8                hints.put(DecodeHintType.CHARACTER_SET, "utf-8");                result = new MultiFormatReader().decode(bitmap, hints);                String resultStr = result.getText();                System.out.println("解析后内容:" + resultStr);            } catch (IOException ioe) {                System.out.println(ioe.toString());            } catch (ReaderException re) {                System.out.println(re.toString());            }        } catch (Exception ex) {            System.out.println(ex.toString());        }    }}
1 0
原创粉丝点击