1. 程式人生 > >Java生成二維碼之 ZXing

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是黑白的,暫時還沒找出原因。以後弄好了再更。生成的二維碼如下: