Java生成二维码


java生成二维码

本文通过Java提供两种生成二维码以及解析二维码的方法

1.zxing

编码前准备:

  1. 下载zxing,下载后提取出core,javase中com文件夹下的文件自己打成jar包,供一会使用。zxing源码下载
  2. jdk版本:1.7及以上
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;

/**
 * 使用zxing生成二维码
 * 
 * @author suny
 */
public class CreateQRcode {

    public static void main(String[] args) {
        // 定义二维码图片参数
        int width = 300;
        int height = 300;
        String format = "jpg";
        String content = "www.baidu.com";

        // 定义二维码的参数
        HashMap<EncodeHintType, Object> map = new HashMap<EncodeHintType, Object>();
        // 定义二维码字符集
        map.put(EncodeHintType.CHARACTER_SET, "utf-8");
        // 纠错等级
        map.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
        // 边距
        map.put(EncodeHintType.MARGIN, 2);

        /*
         * content:二维码内容 format:二维码类型
         */
        try {
            // 生成二维码
            BitMatrix bitmatrix = new MultiFormatWriter().encode(content,
                    BarcodeFormat.QR_CODE, width, height, map);
            Path file = new File("E:/img.jpg").toPath();
            MatrixToImageWriter.writeToPath(bitmatrix, format, file);

        } catch (Exception e) {
            e.printStackTrace();
        } 

    }
}


import java.awt.image.BufferedImage;
import java.io.File;
import java.util.HashMap;
import javax.imageio.ImageIO;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.HybridBinarizer;

/**
 * 使用zxing解析二维码
 * @author suny
 */
public class ReadQRcode {

    public static void main(String[] args) {
        try {
            MultiFormatReader multiFormatReader = new MultiFormatReader();
            File file = new File("E:/img.jpg");
            // 读取文件识别成为一张图片
            BufferedImage image = ImageIO.read(file);

            BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(
                    new BufferedImageLuminanceSource(image)));

            // 定义二维码的参数
            HashMap map = new HashMap();
            // 定义二维码字符集
            map.put(EncodeHintType.CHARACTER_SET, "utf-8");
            Result result = multiFormatReader.decode(binaryBitmap, map);
            System.out.println("解析结果:"+result.toString());
            System.out.println("二维码格式:"+result.getBarcodeFormat());
            System.out.println("二维码格式:"+result.getText());
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

2.qrcode

编码前准备:
1. 下载qrcode生成包。qrcode生成包
2. 下载qrcode读取包。qrcode读取包
3. jdk版本:1.7及以上

/*
 *created by2017年11月17日
 */
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import com.swetake.util.Qrcode;

/**
 * 使用qrcode生成二维码
 * 
 * @author suny
 */
public class CreateQRcode {

    public static void main(String[] args) throws IOException {
        Qrcode x = new Qrcode();
        x.setQrcodeErrorCorrect('M');// 纠错等级
        x.setQrcodeEncodeMode('B');// M代表数字;A代表a-Z;B代表任意字符
        x.setQrcodeVersion(7);// 版本
        String qrData = "www.baidu.com";
        // 规定尺寸
        int width = 67 + 12 * (7 - 1);
        int height = 67 + 12 * (7 - 1);
        // 创建一个缓冲区图片
        BufferedImage bufferedImage = new BufferedImage(width, height,
                BufferedImage.TYPE_INT_RGB);
        // Java提供的画图工具
        Graphics2D gs = bufferedImage.createGraphics();
        gs.setBackground(Color.WHITE);
        gs.setColor(Color.BLACK);
        // 清除画板内容
        gs.clearRect(0, 0, width, height);
        // 将文本转换成字节数
        byte[] d = qrData.getBytes();

        int pixoff = 2;// 偏移量
        // 进行填充
        if (d.length > 0 && d.length < 120) {

            boolean[][] s = x.calQrcode(d);

            for (int i = 0; i < s.length; i++) {
                for (int j = 0; j < s.length; j++) {
                    if (s[j][i]) {
                        gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
                    }
                }
            }
        }
        gs.dispose();
        bufferedImage.flush();

        ImageIO.write(bufferedImage, "jpg", new File("E:/aa.jpg"));
        System.out.println("生成成功");

    }

}


/*
 *created by2017年11月17日
 */
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import jp.sourceforge.qrcode.QRCodeDecoder;
/**
 * 使用qrcode解析二维码
 * @author sunyi
 */
public class ReadQRcode {

    public static void main(String[] args) throws IOException {
        File file = new File("E:/aa.jpg");
        // 读取文件识别成为一张图片
        BufferedImage image = ImageIO.read(file);

        QRCodeDecoder codeDecoder = new QRCodeDecoder();

        String rs = new String(codeDecoder.decode(new QRcodeImage_Test(image)));

        System.out.println(rs);
    }

}
/*
 *created by2017年11月17日
 */
import java.awt.image.BufferedImage;
import jp.sourceforge.qrcode.data.QRCodeImage;
/**
 * 
 * @author suny
 */
public class QRcodeImage_Test implements QRCodeImage {

    BufferedImage image;
    public QRcodeImage_Test(BufferedImage image) {
        this.image = image;
    }


    @Override
    public int getHeight() {

        return image.getHeight();
    }


    @Override
    public int getPixel(int arg0, int arg1) {
        return image.getRGB(arg0, arg1);
    }


    @Override
    public int getWidth() {
        return image.getWidth();
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值