如何生成二维码图片

二维码的使用场景越来越多,大家也越来越倾向于扫一扫来实现信息的获取,那么二维码到底是怎么生成的呢,接下来讲述我们是怎么将一串信息转化为二维码图片的代码如下:

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.util.EnumMap;
import javax.imageio.ImageIO;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

/**
 * 根据字符串生成二维码工具类
 */
public class QrCodeUtil {
    
    //二维码颜色   0x00000000,黑色 (注:二维码颜色色差大,扫描快,但如果"BLACK'设置为黑色外其他颜色,可能无法扫描)
    private static final int BLACK = 0x00000000;
    // 二维码背景色 0xFFFFFFFF,白色
    private static final int WHITE = 0xFFFFFFFF;
    //二维码图片宽度
    private static final int width = 300;
    //二维码图片高度
    private static final int height = 300;
    // 二维码格式参数
    private static final EnumMap<EncodeHintType, Object> hints = new EnumMap<>(EncodeHintType.class);
    static {
	//二维码的纠错级别(排错率),4个级别:L (7%)、M (15%)、Q (25%)、H (30%)(最高H),纠错信息同样存储在二维码中,
	//纠错级别越高,纠错信息占用的空间越多,那么能存储的有用讯息就越少;选择M,扫描速度快。
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
        // 二维码边界空白大小 1,2,3,4 (4为默认,最大)
        hints.put(EncodeHintType.MARGIN, 1);
        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
    }
	
    /**
     * 测试主函数
     * @param args
     */
    public static void main(String[] args) {
        String content = "abc123456";//需要转化为二维码的信息
        String format = "png";
	//生成的图片将会保存到d盘根目录下,也可以自己设置路径
        writeToFile(content,format,new File("D:"+File.separator+"qrcode.png"));
    }
	
	
     /**
     * 二维码输出到文件
     * @param contents 二维码内容
     * @param format   图片格式
     * @param file     输出文件
     */
    public static void writeToFile(String contents, String format, File file) {
        BufferedImage image = encodeImg(contents);
        try {
            ImageIO.write(image, format, file);
        } catch (IOException e) {
            System.out.println("二维码写入文件失败" + e);
        }
    }
	
    /**
     * 绘制二维码
     * @param contents 二维码内容
     * @return image 二维码图片
     */
    public static BufferedImage encodeImg(String contents) {
        BufferedImage image = null;
        try {
            BitMatrix matrix = new MultiFormatWriter().encode(contents, BarcodeFormat.QR_CODE, width, height, hints);
            image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            int width = matrix.getWidth();
            int height = matrix.getHeight();
            for (int x = 0; x < width; x++) {
                for (int y = 0; y < height; y++) {
                    image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);
                }
            }
        } catch (Exception e) {
            System.out.println("生成二维码失败" + e);
        }
        return image;
    }

}


猜你喜欢

转载自blog.csdn.net/u011900448/article/details/80733108