二维码的生成(加密和解密)
加、解密代码
package com.xb.QRCode;
import com.swetake.util.Qrcode;
import jp.sourceforge.qrcode.QRCodeDecoder;
import jp.sourceforge.qrcode.data.QRCodeImage;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class QRCodeUtil {
/*
conten:二维码内容
format:生产二维码的后缀
imgPath:二维码生成之后的保存路劲
size:二维码的尺寸
*/
// 绘制二维码 加密
public void QRCodeEncode(String conten,String format,String imgPath,int size){
BufferedImage image = null;
// 字符串转二维boolean数组
Qrcode qrcode = new Qrcode();
qrcode.setQrcodeEncodeMode('B'); // 设置支持的数据类型
qrcode.setQrcodeErrorCorrect('M'); // 设置容错率
qrcode.setQrcodeVersion(size); // 设置尺寸大小
boolean[][] calQrcode = qrcode.calQrcode(conten.getBytes());
int imgSize = 67 + 12 * (size - 1);
image = new BufferedImage(imgSize,imgSize,BufferedImage.TYPE_INT_RGB);
// 创建画板
Graphics2D gs = image.createGraphics();
gs.setBackground(Color.WHITE);// 创建画板背景色
gs.setColor(Color.BLACK); // 画笔的颜色
gs.clearRect(0,0,imgSize,imgSize); //画板的大小
int pixoff = 2;
for(int i = 0; i < calQrcode.length; i++){
for(int j = 0; j < calQrcode.length; j++){
if(calQrcode[i][j]){
gs.fillRect(i*3+pixoff, j*3+pixoff, 3, 3);
}
}
}
File logoFile = new File("src/com/xb/QRCode/logo.jpg");
BufferedImage read = null;
try {
read = ImageIO.read(logoFile);
} catch (IOException e) {
e.printStackTrace();
}
gs.drawImage(read,imgSize/5*2,imgSize/5*2,imgSize/5*1, imgSize/5*1,null);
gs.dispose();// 释放空间
image.flush();
try {
ImageIO.write(image,format,new File(imgPath));
} catch (IOException e) {
e.printStackTrace();
}
}
// 解析二维码 解密
public String QRCodeDecode(String imgPath){
BufferedImage image = null;
try {
image = ImageIO.read(new File(imgPath));// 将图片读到内存中
} catch (IOException e) {
e.printStackTrace();
}
QRCodeDecoder decoder = new QRCodeDecoder();
QRCodeImageImpl codeImage = new QRCodeImageImpl(image);
byte[] bytes = decoder.decode(codeImage); // 解析图片
String str = new String(bytes);
return str;
}
public class QRCodeImageImpl implements QRCodeImage{
private BufferedImage image;
public QRCodeImageImpl(BufferedImage image){
this.image = image;
}
@Override
public int getWidth() {
return image.getWidth();
}
@Override
public int getHeight() {
return image.getHeight();
}
@Override
public int getPixel(int x, int y) {
return image.getRGB(x,y);
}
}
}
测试代码
package com.xb.QRCode;
public class QRCodeTest {
public static void main(String[] args) {
String content = "这段是你二维码的内容";
String imgPath = "src/com/xb/QRCode/QR二维码.png";
//加密 文字转二维码
QRCodeUtil QRCodeUtil = new QRCodeUtil();
QRCodeUtil.QRCodeEncode(content, "png",imgPath, 17);
System.out.println("二维码绘制完成!");
// 解码
String s = QRCodeUtil.QRCodeDecode("src/com/xb/QRCode/QR二维码.png");
System.out.println("解码后的内容为:"+s);
}
}