主要介绍:
本文主要通过qrcode来实现二维码的生成及解析。
基于qrcode实现的二维码需要两个jar包 一个是用来生成二维码,一个是用来解析二维码,
本文是实现扫描电子签名,保存本地电话簿的一个二维码生成,下一篇讲解如何实现二维码的解析。
二维码介绍:
现在时代无论是支付,电子名片,微信公众号,基本信息的传递,都可以通过扫码来进行,这就是现在最流行的二维码。
二维码拥有自己的使用规范,国家制定了基本的二维码设计标准,及其版本号 ,容错率,二维码整体结构。
二维码实现的三种方式:
1:基于 qrcode.jar 实现的二维码生成及解析 (生成二维码比较好看)
2:基于 zxing.jar 实现的二维码生成及解析 (生成二维码比较丑)
3:基于 jquery.qrcode.js 实现的前端页面显示解析 (生成二维码比较丑)
二维码不同功能的实现:
1:实现页面链接 在写入内容时候以 Http:// 协议进行开头
2:实现内容展示 在写入内容的时候直接定义字符串即可
3:实现扫一扫电子签名 在写入内容的时候按照Vcard给出的格式进行编写
代码案例演示 :
(
注释标记具体过程实现和如何在web开发中自定义内容并自动生成二维码)
// 获取生成二维码对象
Qrcode qr = new Qrcode();
// 设置二维码的容错率,容错率包括L:容错级别7% M:容错级别为15% H:容错级别为25% Q:容错级别为30%
//容错级别代表的是允许二维码错误所占的百分比
qr.setQrcodeEncodeMode(‘M’);
// 设置qr的编码格式,M:代表的是数字 A:代表的是a-Z B:代表的是其他字符
qr.setQrcodeErrorCorrect(‘B’);
// 设置版本号,版本号:1-40(根据写入二维码内容的尺寸来设置)
qr.setQrcodeVersion(14);
// 设置图片对象的宽 高 imageType(因为需要生成图片对象,实际的二维码就是一个底色为白色的图片对象)
int width = 67 + 12 * (14 – 1);
int height = 67 + 12 * (14 – 1);
int imageType = BufferedImage.TYPE_INT_RGB;
// 获取图片对象
BufferedImage bufferedImage = new BufferedImage(width, height,
imageType);
// 获取画笔(画笔是用来画图片内容,因为二维码本身就是一个图片)
Graphics2D gf = bufferedImage.createGraphics();
// 设置画笔的背景颜色(实际上就是图片的底色,我们所看见的二维码底色都是白色,显示的是黑色的二维码)
gf.setBackground(Color.WHITE);
// 设置画笔的颜色(实际上就是二维码能看到的黑色的边际线)
gf.setColor(Color.BLACK);
// 清除一片区域
gf.clearRect(0, 0, width, height);
// 设置二维码内容 基于vacard的实现 设置名片通讯录二维码,字符串的写法是Vcard定义的标准,
//目的是为了生成电子签名,大家可以根据个人信息来进行修改进行测试
String str = “BEGIN:VCARD”
+ ” VERSION:3.0″ + “\n”
+ “FN:姓名”+ “\n”
+ “TEL;CELL;VOICE:电话” + “\n”
+ “TEL;WORK;VOICE:工作电话” + “\n”
+ “EMAIL;PREF;INTERNET:邮箱” + “\n”
+ “URL:个人主页”+ “\n”
+ “orG:职位” + “\n”
+ “ROLE:部门” + “\n”
+ “TITLE:标题”+ “\n”
+ “ADR;WORK;POSTAL:住址” + “\n”
+ “REV:2012-12-27T08:30:02Z” + “\n”
+ “END:VCARD”;
// 设置偏移量(为的是生成二维码和图片对应,防止有错位的现象)
int len = 2;
//通过二维码对象添加自己写入的内容,返回的是二维数组进行遍历
boolean[][] calQrcode = qr.calQrcode(str.getBytes(“utf-8”));
for (int i = 0; i < calQrcode.length; i++) {
for (int j = 0; j < calQrcode.length; j++) {
if (calQrcode[i][j])
gf.fillRect(i * 3 + len, j * 3 + len, 3, 3);
}
}
//通过图片对象提供的流写入
ImageIO.write(bufferedImage, “png”, new File(“f:/qrcode_add.png”));
System.out.println(“success”);
//如果想显示在页面上 我们可以通过 HttpServletResponse response 对象getOutPutStream()
//通过响应输出流写到页面上 ,童鞋们自己试着封装一下,这样就可以实现 将我们在页面上手动输入的参数作为二维码的内容来实现动态生成二维码。