1.写这个博客的目的
解决JAVA生成二维码(一)中的一些问题。
2.解读排错率,编码模式,版本问题.以下都是自己测试中存在的问题
1.排错率
排错的原理是二维码在编码过程中进行了冗余,就像是123被编码成123123,这样只要扫描到一部分二维码图片,二维码内容还是可以被全部读到。
设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小,即是指二维码图标被遮挡多少后,仍可以被扫描出来的能力。排错率越高,则二维码图片能被遮挡的部分越多。
2.编码模式
编码模式:Numeric(N-数字):Binary(B-二进制):Alphanumeric(A-英文字母)
不同的内容使用对应的编码格式
3.版本问题(1-40)
即二维码的规格,QR码符号共有40种规格的矩阵(一般为黑白色),从21x21(版本1),到177x177(版本40),每一版本符号比前一版本每边增加4个模块。
问题一:排错率选太高导致内容过长,二维码生成失败
如运行如下代码:
package com.wangcong;
import com.swetake.util.Qrcode;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
public class two {
public static void main(String[] args) {
String imgPath = "E:/code.png"; // 二维码保存路径
// 跳转的内容,如果http://则当做文字处理
String content = "好好学习,天天向上,努力敲代码学JAVA";
// 创建封装类
QrCodeAssis assis = new QrCodeAssis(imgPath, content);
boolean result = assis.createCode(480, 480);
if (result) {
System.out.println("二维码生成成功!");
} else {
System.out.println("二维码生成失败!");
}
}
}
/**
* 使用QRCode生成二维码
*/
class QrCodeAssis{
private String imgPath; // 二维码保存路径
private String content; // 二维码内容
/**
* imgPath 二维码保存路径, content 二维码内容]
*/
QrCodeAssis(String imgPath, String content) {
this.imgPath = imgPath;
this.content = content;
}
/**
* boolean 二维码是否生成成功
*/
boolean createCode(int width, int height) {
boolean flag = true;
try {
Qrcode qrcode = new Qrcode(); // 创建Qrcode对象
// 排错率可选(%)-L(7):M(15):Q(25):H(30)
qrcode.setQrcodeErrorCorrect('Q');
// 编码模式-Numeric(N-数字):Binary(B-二进制):Alphanumeric(A-英文字母)
qrcode.setQrcodeEncodeMode('B');
qrcode.setQrcodeVersion(3); // 设置版本(可选)
width = width >= 100 ? width : 100; // 宽度至少100
height = height >= 100 ? height: 100; // 高度至少100
// 创建画布和画图设备
BufferedImage img &#