java生成二维码-zxing

创建带logo的二维码: 

package com.joydo.zxing;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.swetake.util.Qrcode;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.util.HashMap;

//生成二维码,纠错能力越高,所存储的数据量越少
public class CreateLogoQRCode {
    public static int createQRCode(String content, String imgPath,String logo) {
        try {
            Qrcode qrcodeHandler = new Qrcode();
            qrcodeHandler.setQrcodeErrorCorrect('M');
            qrcodeHandler.setQrcodeEncodeMode('B');
            qrcodeHandler.setQrcodeVersion(7);
            // System.out.println(content);
            byte[] contentBytes = content.getBytes("gb2312");
            //构造一个BufferedImage对象 设置宽、高
            BufferedImage bufImg = new BufferedImage(140, 140, BufferedImage.TYPE_INT_RGB);
            Graphics2D gs = bufImg.createGraphics();
            gs.setBackground(Color.WHITE);
            gs.clearRect(0, 0, 140, 140);
            // 设定图像颜色 > BLACK
            gs.setColor(Color.BLACK);
            // 设置偏移量 不设置可能导致解析出错
            int pixoff = 2;
            // 输出内容 > 二维码
            if (contentBytes.length > 0 && contentBytes.length < 120) {
                boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);
                for (int i = 0; i < codeOut.length; i++) {
                    for (int j = 0; j < codeOut.length; j++) {
                        if (codeOut[j][i]) {
                            gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
                        }
                    }
                }
            } else {
                System.err.println("QRCode content bytes length = "+ contentBytes.length + " not in [ 0,120 ]. ");
                return -1;
            }
            Image img = ImageIO.read(new File(logo));//实例化一个Image对象。
            gs.drawImage(img, 55, 55, 30, 30, null);
            gs.dispose();
            bufImg.flush();
            // 生成二维码QRCode图片
            File imgFile = new File(imgPath);
            ImageIO.write(bufImg, "png", imgFile);
        }catch (Exception e){
            e.printStackTrace();
            return -100;
        }
        return 0;
    }

    public static void main(String[] args){
        createQRCode("http://www.baidu.com",
                "d:/upload/code.png",
                "d:/upload/logo.png");
    }
}

创建二维码

package com.joydo.zxing;

import java.io.File;
import java.nio.file.Path;
import java.util.HashMap;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

//生成二维码,纠错能力越高,所存储的数据量越少
public class CreateQRCode {
    public static void main(String args[]){
        int width=300;
        int height=300;
        String format="png";
        //二维码的内容和需要跳转的路径
        String content="www.imooc.com";

        //定义二维码的参数
        HashMap hints=new HashMap();
        //设置字符编码
        hints.put(EncodeHintType.CHARACTER_SET,"utf-8");
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
        //设置边框边距
        hints.put(EncodeHintType.MARGIN,2);

        //生成二维码
        try{
            BitMatrix bitMatrix=new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE,width,height,hints);
            Path file=new File("D:/upload/img.png").toPath();
            MatrixToImageWriter.writeToPath(bitMatrix,format,file);
        }catch (Exception e){

        }
    }
}

读取二维码

package com.joydo.zxing;

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 java.awt.image.BufferedImage;
import java.io.File;
import java.nio.file.Path;
import java.util.HashMap;

public class ReadQRCode {
    public static void main(String []args){
        try {
            MultiFormatReader formatReader=new MultiFormatReader();
            File file=new File("d:/upload/img.png");
            BufferedImage image= ImageIO.read(file);
            BinaryBitmap binaryBitmap=new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));
            //定义二维码的参数
            HashMap hints=new HashMap();
            //设置字符编码
            hints.put(EncodeHintType.CHARACTER_SET,"utf-8");

            Result result=formatReader.decode(binaryBitmap, hints);

            System.out.println("解析结果:"+result.toString());
            System.out.println("二维码格式:"+result.getBarcodeFormat());
            System.out.println("二维码文本:"+result.getText());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

 

你可能感兴趣的:(java二维码)