1、前言
整理一个使用qrcode.jar生成二维码的测试方法,以备后面学习使用。
2、使用准备
Qrcode.jar
3、demo
/*
生成二维码
*/
@RequestMapping(value="/creatQrcode", method = RequestMethod.POST)
@ResponseBody
public Object createQr(String content, HttpServletRequest request){
Map<String, Object> map = new HashMap<String, Object>(5);
try {
Qrcode qrcode = new Qrcode();
//设置排错率(H L M Q)
qrcode.setQrcodeErrorCorrect('M');
//N:数字 A:a-Z B:其他字符
qrcode.setQrcodeEncodeMode('B');
//设置版本(版本至49)
qrcode.setQrcodeVersion(7);
// 公式 67+12*(版本号-1)
int width = 67 + 12*(7-1);
int height = 67 + 12*(7-1);
//定义图片缓冲区(指定图片缓冲区宽和高,以及类型)
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
//定义画板
Graphics2D graphics = bufferedImage.createGraphics();
graphics.setBackground(Color.WHITE);
graphics.setColor(Color.BLACK);
//初始化,并指定画板的宽和高
graphics.clearRect(0, 0, width, height);
//定义偏移量
int pixoff = 2;
//要绘制的内容(字节数组)
byte[] contentBytes = content.getBytes("utf-8");
//开始绘制:内容长度默认为124(超过124会报错)
if (contentBytes.length > 0 && contentBytes.length < 120) {
boolean[][] qr = qrcode.calQrcode(contentBytes);
for (int i = 0; i < qr.length; i++) {
for (int j = 0; j < qr.length; j++) {
if (qr[j][i]) {
graphics.fillRect(j*3+pixoff, i * 3 + pixoff, 3, 3);
}
}
}
}
//生成logo
Image img = ImageIO.read(new File(request.getSession().getServletContext().getRealPath("/") + "/img/logo.jpg")); // 实例化一个Image对象。
graphics.drawImage(img, (width-30)/2, (height-30)/2, 30, 30, null); // 75,75是距离gs两个边的距离,50,50是中间logo的大小
//收起画板
graphics.dispose();
bufferedImage.flush();
//将图片写入文件
//ImageIO.write(bufferedImage, "jpg", new File("D:/20161010/qrcode/qrcode.jpg")); --写到文件中
//ImageIO.write(bufferedImage, "jpg", response.getOutputStream()); -- 使用原始的servlet,直接返回给请求的地方
//字节数组流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//图片输出流
ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(baos);
//将图片写入图片流
ImageIO.write(bufferedImage, "jpg", imageOutputStream);
//将图片转化成base64,web显示
String base64 = Base64.encode(baos.toByteArray());
map.put("success", true);
map.put("imageBase64", base64);
} catch (Exception e) {
e.printStackTrace();
map.put("success", false);
}
return map;
}
4、效果