Java生成二维码之 ZXing

  前几天突然有个新的想法,给某个程序员送礼物的想法,程序员的浪漫(误)。所以特地去学了一下二维码生成相关知识,还买了个域名。生成二维码的方式有好几种,这次用的是zxing来生成的。

  很简单,接下来就放一下代码。有关二维码相关原理看了一下这位大佬的文章:https://coolshell.cn/articles/10590.html

  ZXing的github地址放在这里,下载下来再弄成jar包就可以用了:https://github.com/zxing/

package lib;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Path;
import java.util.HashMap;

import javax.imageio.ImageIO;

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) throws IOException {
        int width = 300;
        int height = 300;
        String format = "png";   //生成二维码的格式
        String contents = "https://www.cnblogs.com/cy708/";   //二维码内容,可以是文字、链接等等
        HashMap hints = new HashMap();    //存放二维码的参数
        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");    
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);    //二维码纠错等级,详情见二维码原理链接
        hints.put(EncodeHintType.MARGIN, 2);    
        Path path = new File("D:/eclipse/qrcode/blogCode.png").toPath();  //生成二维码的存放路径
        
        createCode(width,height,format,contents,hints,path);

    }
    
    public static void createCode(int width,int height,String format,String contents,HashMap hints,Path path) {
        try {
            BitMatrix bitMatrix = new MultiFormatWriter().encode(contents, BarcodeFormat.QR_CODE, width, height,hints);
            MatrixToImageWriter.writeToPath(bitMatrix, format, path);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

  以上代码有一些包其实应该是多余的,因为还有一个在二维码中间插入logo的函数,主要用了Graphics2D类。但是之前没了解过这个类,生成的二维码中间的logo是黑白的,暂时还没找出原因。以后弄好了再更。生成的二维码如下:

猜你喜欢

转载自www.cnblogs.com/cy708/p/10010217.html