Java生成二维码的方式有很多,这里基于谷歌的zxing
做演示。
使用zxing
的好处在于方便,zxing
的jar
包可在Maven中央仓库找到并依赖到本地。
而像QRCode
并不能直接依赖到本地,需要自行下载jar
包然后安装到本地Maven仓库,相对多了一道程序。
下面是使用zxing
的项目流程:供参考
1-POM依赖
代码语言:javascript复制<!-- 谷歌二维码生成-->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.4.1</version>
</dependency>
2-创建二维码的工具类
封装二维码的工具类是为了方便以后在其他项目中再次使用。
工具类代码较多,放在文章内影响阅读,公众号后台回复【zxing工具类】获取工具类源码。
部分代码如下:供参考
代码语言:javascript复制/**
* @param content 内容
* @param imgPath LOGO图片
* @param destPath 存储路径
* @param needCompress 是否压缩
* @author 二饭
* @email 1786705138@qq.com
*/
public String encodeTest(String content, String imgPath, String destPath,boolean needCompress)throws Exception{
Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
hints.put(EncodeHintType.ERROR_CORRECTION, this.Level);// 纠错等级,越高存储越多,越不易被识别
hints.put(EncodeHintType.CHARACTER_SET, CHARSET);// 编码字符集
hints.put(EncodeHintType.MARGIN, this.MARGIN);// 设置白边边缘
// 创建位矩阵对象 内容、图片类型、宽度、高度、
BitMatrix bitMatrix = new MultiFormatWriter().encode(content,BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE, hints);
// 获取宽度高度
int width = bitMatrix.getWidth();
int height = bitMatrix.getHeight();
// 生成图像
BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
for (int x = 0; x < width; x ) {
for (int y = 0; y < height; y ) {
image.setRGB(x, y, bitMatrix.get(x, y) ? this.COLOR
: this.BGC);
}
}
mkdirs(destPath);
String file = System.currentTimeMillis() ".jpg";
ImageIO.write(image, FORMAT_NAME, new File(destPath "/" file));
return file;
}
3-调用传参详解
工具类中可供设置的参数为:内容编码格式、图片格式、二维码尺寸、LOGO尺寸、前景色、后景色、二维码边缘、纠错等级、二维码保存地址。
编码格式:默认为UTF-8
,可选ASCII
、GB2312
等
图片格式:默认为JPG
,可选PNG
二维码尺寸:默认为300
,建议100-1000,太小影响使用,太大影响程序执行效率
LOGO尺寸:二维码图片中间的LOGO图片,默认会压缩,如果觉得自己图片比较小,可选择不压缩
前景色:常见二维码的黑色部分
后景色:常见二维码的白色部分
二维码边缘:二维码白色边缘的宽度
纠错等级:纠错等级影响识别效率,分为L < M < Q <H,等级越高存储的内容越少,但更容易被识别,这是因为纠错等级越高,他的内容会被重复存储在二维码内容中,也就是说,即使是被遮挡了一部分还是可以被识别成功
如下是生成的无边缘二维码: