美文网首页
google zxing 生成二维码(java)

google zxing 生成二维码(java)

作者: sunk_fdcb | 来源:发表于2018-08-03 17:16 被阅读0次

1.gradle导入

// https://mvnrepository.com/artifact/com.google.zxing/core

compile group: 'com.google.zxing', name: 'core', version: '3.3.3'

2.代码

package com.ligeit.ec.qrcode.common;

import com.github.binarywang.utils.qrcode.BufferedImageLuminanceSource;

import com.google.zxing.*;

import com.google.zxing.common.BitMatrix;

import com.google.zxing.common.HybridBinarizer;

import javax.imageio.ImageIO;

import java.io.File;

import java.awt.image.BufferedImage;

import java.io.IOException;

import java.util.HashMap;

import java.util.Map;

public class QRCodeUtil {

    //二维码颜色

    private static final int BLACK = 0xFF000000;

    //二维码颜色

    private static final int WHITE = 0xFFFFFFFF;

    /**

    * ZXing 方式生成二维码

    * @param text 二维码内容

    * @param width 二维码宽

    * @param height 二维码高

    * @param outPutPath 二维码生成保存路径

    * @param imageType 二维码生成格式

    */

    public static void zxingCodeCreate(String text, int width, int height, String outPutPath, String imageType){

        Map his = new HashMap();

        //设置编码字符集

        his.put(EncodeHintType.CHARACTER_SET, "utf-8");

        try {

            //1、生成二维码

            BitMatrix encode = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height, his);

            //2、获取二维码宽高

            int codeWidth = encode.getWidth();

            int codeHeight = encode.getHeight();

            //3、将二维码放入缓冲流

            BufferedImage image = new BufferedImage(codeWidth, codeHeight, BufferedImage.TYPE_INT_RGB);

            for (int i = 0; i < codeWidth; i++) {

                for (int j = 0; j < codeHeight; j++) {

                    //4、循环将二维码内容定入图片

                    image.setRGB(i, j, encode.get(i, j) ? BLACK : WHITE);

                }

            }

            File outPutImage = new File(outPutPath);

            //如果图片不存在创建图片

            if(!outPutImage.exists()) outPutImage.createNewFile();

            //5、将二维码写入图片

            ImageIO.write(image, imageType, outPutImage);

        } catch (WriterException e) {

            e.printStackTrace();

            System.out.println("二维码生成失败");

        } catch (IOException e) {

            e.printStackTrace();

            System.out.println("生成二维码图片失败");

        }

    }

    /**

    * 二维码解析

    * @param analyzePath 二维码路径

    * @return * @throws IOException

    */

    @SuppressWarnings({ "rawtypes", "unchecked" })

    public static Object zxingCodeAnalyze(String analyzePath) throws Exception{

        MultiFormatReader formatReader = new MultiFormatReader();

        Object result = null;

        try {

            File file = new File(analyzePath);

            if (!file.exists()) { return "二维码不存在"; }

            BufferedImage image = ImageIO.read(file);

            LuminanceSource source = new BufferedImageLuminanceSource(image);

            Binarizer binarizer = new HybridBinarizer(source);

            BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);

            Map hints = new HashMap();

            hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");

            result = formatReader.decode(binaryBitmap, hints);

        } catch (NotFoundException e) {

            e.printStackTrace();

        }

        return result;

    }

    public static void main(String[] args) {

        String pathname = "public/uploads/qrcode/";

        File uploadDir = new File(pathname);

        uploadDir.mkdirs();

        //ZXingCode 二维码生成测试

        QRCodeUtil.zxingCodeCreate("http://blog.csdn.net/u014266877", 300, 300, "public/uploads/qrcode/zxingcode.jpg", "jpg");

        /**

        * ZxingCode 二维码解析

        * String zxingAnalyze = QRCodeUtil.zxingCodeAnalyze("E://zxingcode.jpg").toString();

        */

        System.out.println("success");

    }

}

相关文章

网友评论

      本文标题:google zxing 生成二维码(java)

      本文链接:https://www.haomeiwen.com/subject/oykuvftx.html