您的位置 首页 java

Java生成二维码与解码二维码

下载 qrcode .jar包
下载完成后在
cmd 命令行执行以下命令

  mvn install:install-file -Dfile = QRCode的路径 -DgroupId=QRCode -DartifactId=QRCode -Dversion=3.0 -Dpackaging=jar  

注意: 需要配置 maven 环境变量

pom .xml文件里添加jar包

 <dependency>
 <groupId>QRCode</groupId>
 <artifactId>QRCode</artifactId>
 <version>3.0</version>
</dependency>   

运行类

 package test;

public class Test {

public  static   void  main(String[] args) throws  Exception  {

// 生成后的二维码存放的路径
String imgPath = "D://二维码.png";
// 二维码的内容
String content = "hello world";
// 跳转网页
//String content = "#34;;

/**
 * 生成二维码
 */QRCodeUtil qrCodeUtil = new QRCodeUtil();
qrCodeUtil.encoderQRCode(content, imgPath, "png", 17);

/**
 * 解码二维码
 */String imgContent = qrCodeUtil. decode QrCode(imgPath);
System.out.println("imgContent:" + imgContent);

}
}  

生成二维码的方法

 public void encoderQRCode(String content,  String  imgPath, String imgType, int size) {
File file = new  File (imgPath);

BufferedImage bufImg = qrCodeCommon(content, imgType, size);

try {
ImageIO.write(bufImg, imgType, file);
} catch (Exception e) {
e.printStackTrace();
}

}

/**
 * 生成一个二维码的BufferedImage
 * 
 * @param content
 *            内容
 * @param imgType
 *            类型
 * @param size
 *            二维码边长
 * @return
 */public BufferedImage qrCodeCommon(String content, String imgType, int size) {
// BufferedImage.TYPE_INT_ARGB:RGB三基色
BufferedImage bufImg = null;

Qrcode qrcode = new Qrcode();
// 设置二维码的拍错率
qrcode.setQrcodeErrorCorrect('M');
// 可存放的信息
qrcode.setQrcodeEncodeMode('B');
// 尺寸:取值范围:1-40
qrcode.setQrcodeVersion(size);
 byte [] bytes = null;
try {
bytes = content.getBytes("utf-8");
} catch (Exception e) {
e.printStackTrace();
}

// 将内容转换成字节数组
boolean[][] codeOut = qrcode.calQrcode(bytes);

int imgSize = 67 + 12 * (size - 1);
// BufferedImage:内存中的图片
bufImg = new BufferedImage(imgSize, imgSize, BufferedImage.TYPE_INT_ARGB);
// 创建一个画板
Graphics2D gs = bufImg.createGraphics();
// 设置二维码背景颜色:一般为白色
gs.setBackground(Color.WHITE);
// 初始化,x和y为0代表左上角,size一样代表是个正方形
gs.clearRect(0, 0, imgSize, imgSize);
// 设置二维码颜色:一般为黑色
gs.setColor(Color.BLACK);

for (int i = 0; i < codeOut.length; i++) {
for (int j = 0; j < codeOut.length; j++) {
if (codeOut[i][j]) {
gs.fillRect(j * 3, i * 3, 3, 3);
}
}
}

// 给二维码中间增加logo
try {
// logo路径
File file = new File("D://jieZai.jpg");
// 加载一个Image对象
Image logo = ImageIO.read(file);
int width = bufImg.getWidth();
int height = bufImg.getHeight();

// 在已生成的二维码上画logo
gs.drawImage(logo, imgSize / 5 * 2, imgSize / 5 * 2, width / 5, height / 5, null);

} catch (Exception e) {
e.printStackTrace();
}

gs.dispose(); // 释放空间
bufImg.flush(); // 刷新

return bufImg;
}  

解码的方法

  /**
* 解码
* 
* @param imgPath  图片路径
* @return
*/public String decodeQrCode(String qrImg) {
File file = new File(qrImg);
Result result = null;
 if  (!qrImg.isEmpty()) {
try {
// BufferedImage内存中的图片
BufferedImage image = ImageIO.read(file);

BinaryBitmap binaryBitmap = new BinaryBitmap(
new HybridBinarizer(new BufferedImageLuminanceSource(image)));

// 定义二维码的参数:
 HashMap <DecodeHintType, Object> hints = new HashMap<DecodeHintType, Object>();
// 定义 字符集 
hints.put(DecodeHintType.CHARACTER_SET, " utf -8");
// 解密
result = new MultiFormatReader().decode(binaryBitmap, hints);
} catch (Exception e) {
e.printStackTrace();
}
}
return result.getText();
}  

文章来源:智云一二三科技

文章标题:Java生成二维码与解码二维码

文章地址:https://www.zhihuclub.com/171600.shtml

关于作者: 智云科技

热门文章

网站地图