谷歌zxing操作二维码工具类

首先在项目中引入谷歌zxing的jar包

<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>javase</artifactId>
    <version>3.3.2</version>
</dependency>

二维码工具类如下:

package com;

import com.google.zxing.*;
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;

import javax.imageio.ImageIO;
import javax.imageio.stream.FileImageInputStream;
import javax.imageio.stream.FileImageOutputStream;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;

/**
 *  二维码工具类
 * @author superchen
 * @since 2018-05-24
 */
public class QRCodeUtil {

    /**
     * 生成二维码
     */
    public static void createQRCode(String content,String filePath,String fileName,String format) throws WriterException, IOException {

        int width = 300; // 图像宽度
        int height = 300; // 图像高度

        //编码
        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);

        File outPutImage = new File(filePath+"/"+fileName);
        //创建目录
        if (outPutImage.getParent() != null && !new File(outPutImage.getParent()).exists()) {
            new File(outPutImage.getParent()).mkdirs();
        }
        //如果图片不存在创建图片
        if(!outPutImage.exists())
            outPutImage.createNewFile();

        Path path = FileSystems.getDefault().getPath(filePath, fileName);
        //输出二维码图像
        MatrixToImageWriter.writeToPath(bitMatrix, format, path);
        System.out.println("二维码生成成功.");
    }

    /**
     * 解析二维码
     */
    public static void decode(String filePath) {
        //filePath = "D://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);
            System.out.println("图片中内容: " + result.getText());
            System.out.println("图片中格式: " + result.getBarcodeFormat());
        } catch (IOException e) {
            e.printStackTrace();
        } catch (NotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * 图片转换成Byte数组
     */
    public static byte[] image2Byte(String path) {
        byte[] data = null;
        FileImageInputStream input = null;
        ByteArrayOutputStream output =null;
        try {
            input = new FileImageInputStream(new File(path));
            output = new ByteArrayOutputStream();
            byte[] buf = new byte[1024];
            int numBytesRead = 0;
            while ((numBytesRead = input.read(buf)) != -1) {
                output.write(buf, 0, numBytesRead);
            }
            data = output.toByteArray();
            output.close();
            input.close();
        } catch (FileNotFoundException ex1) {
            ex1.printStackTrace();
        } catch (IOException ex1) {
            ex1.printStackTrace();
        }
        finally {
            try {
                output.close();
                input.close();
            }catch (Exception e){}
        }
        return data;
    }

    /**
     * byte数组到图片
     */
   public static void byte2Image(byte[] data,String path) {
       if (data.length < 3 || path.equals("")) return;
       FileImageOutputStream imageOutput = null;
       try {

           //如果图片不存在创建图片
           File imageFile = new File(path);
           if(!imageFile.exists())
               imageFile.createNewFile();

           imageOutput = new FileImageOutputStream(imageFile);
           imageOutput.write(data, 0, data.length);
           imageOutput.close();
           System.out.println("转成图片成功:" + path);
       } catch (Exception ex) {
           ex.printStackTrace();
       }
       finally {
           try {
               imageOutput.close();
           }catch (Exception e){}
       }
   }
}

猜你喜欢

转载自blog.csdn.net/qq_28397259/article/details/81449150