使用zxing生成和解析二维码

来源:互联网 发布:淘宝更换主营类目影响 编辑:程序博客网 时间:2024/05/22 14:13

1、添加pom文件依赖

<!-- 二维码 --><dependency>    <groupId>com.google.zxing</groupId>    <artifactId>javase</artifactId>    <version>3.3.0</version></dependency><!-- json --><dependency>    <groupId>com.alibaba</groupId>    <artifactId>fastjson</artifactId>    <version>1.2.39</version></dependency>

其中com.google.zxing.javase依赖com.google.zxing.core,会自动引入依赖

2、生成和解析二维码工具类

package com.ahut.util;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.nio.file.FileSystems;import java.nio.file.Path;import java.util.HashMap;import java.util.Map;import javax.imageio.ImageIO;import com.alibaba.fastjson.JSONObject;import com.google.zxing.BarcodeFormat;import com.google.zxing.Binarizer;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.NotFoundException;import com.google.zxing.Result;import com.google.zxing.WriterException;import com.google.zxing.client.j2se.BufferedImageLuminanceSource;import com.google.zxing.client.j2se.MatrixToImageWriter;import com.google.zxing.common.BitMatrix;import com.google.zxing.common.HybridBinarizer;/** *  * @ClassName: QRCodeUtil * @Description: 二维码工具类 * @author cheng * @date 2017年10月23日 下午5:27:01 */public class QRCodeUtil {    /**     *      * @Title: testEncode     * @Description:     * @throws WriterException     * @throws IOException     *      *             com.google.zxing.MultiFormatWriter 根据内容以及图像编码参数生成图像2D矩阵。     *             com.google.zxing.client.j2se.MatrixToImageWriter     *             根据图像矩阵生成图片文件或图片缓存 BufferedImage 。     */    public static void testEncode() throws WriterException, IOException {        String filePath = "E://";        String fileName = "zxing.png";        JSONObject json = new JSONObject();        json.put("zxing", "https://github.com/zxing/zxing/tree/zxing-3.0.0/javase/src/main/java/com/google/zxing");        json.put("author", "shihy");        String content = json.toJSONString();// 内容        int width = 200; // 图像宽度        int height = 200; // 图像高度        String format = "png";// 图像类型        Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");        BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);// 生成矩阵        Path path = FileSystems.getDefault().getPath(filePath, fileName);        MatrixToImageWriter.writeToPath(bitMatrix, format, path);// 输出图像        System.out.println("输出成功.");    }    /**     *      * @Title: testDecode     * @Description:     *      *              使用 javax.imageio.ImageIO 读取图片文件,并存为一个     *               java.awt.image.BufferedImage 对象。     *      *               将 java.awt.image.BufferedImage 转换为 ZXing 能识别的     *               com.google.zxing.BinaryBitmap 对象。     *      *               com.google.zxing.MultiFormatReader 根据图像解码参数来解析     *               com.google.zxing.BinaryBitmap 。     */    public static void testDecode() {        String filePath = "E://zxing.png";        BufferedImage image;        try {            image = ImageIO.read(new File(filePath));            LuminanceSource source = new BufferedImageLuminanceSource(image);            Binarizer binarizer = new HybridBinarizer(source);            BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);            Map<DecodeHintType, Object> hints = new HashMap<DecodeHintType, Object>();            hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");            Result result = new MultiFormatReader().decode(binaryBitmap, hints);// 对图像进行解码            JSONObject content = JSONObject.parseObject(result.getText());            System.out.println("图片中内容:  ");            System.out.println("author: " + content.getString("author"));            System.out.println("zxing:  " + content.getString("zxing"));            System.out.println("图片中格式:  ");            System.out.println("encode: " + result.getBarcodeFormat());        } catch (IOException e) {            e.printStackTrace();        } catch (NotFoundException e) {            e.printStackTrace();        }    }}