一、二维码的简介
1,二维码或者二维条码是用某种特定的几何图形按一定的规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的图形。
2,二维码上有很多的点和空白,其中的点代表二进制的1,而空白代码二进制的0。
3,二维码依据码制的编码原理,通常分为三种:线性堆叠式二维码、矩阵式二维码、邮政码。
a,线性堆叠式二维码:建立在一维条码基础上,按需要堆积成两行或多行。与一维码很类似。
b,矩阵式二维码:(最常用)在一个矩阵空间通过黑、白像素在矩阵中的不同分布进行编码。在矩阵相应元素位置上,用点(方点、圆点或 其它形状)的出现表示二进制“1”,点的不出现表示二进制的“0”。此文章主要是讲解如何生成QR CODE二维码。
c,邮政码:通过不同长度的条进行编码,主要用于邮件编码。
4,二维码优点:
(1)高密度编码,信息容量大;
(2)编码范围广;
(3)容错能力强(假如二维码缺失一角,一般不影响整个二维码读取);
(4)编码可靠性高;
(5)可引入加密措施;
(6)成本低,易制作,持久耐用。
5,二维码缺点:
(1)二维码技术成为手机病毒、钓鱼网站传播的新渠道;
(2)信息泄露。
6,目前流行的三大国际标准:
(1)PDF417:不支持中文;
(2)DM:专利未公开,需支付专利费用;
(3)QR code:专利公开,支持中文;其中QR Code(Quick Response Code)与其他二维码相比,具有识读速度快、数据密度大、占用 空间少的优势。
7,这里讲解生成二维码的两种方法:
(1)第三方jar包,zxing和qrcode.jar
(2)javascript,如jquery.qrcode.js
二、
- jar包zxing的地址: http://github.com/zxing/
- 得到该jar包后打开eclipse,创建一个java项目,导入jar包zxing。
- 创建一个生成二维码的类CreateQRCode
package cn.zclong.zxing; import java.io.File; import java.nio.file.Path; import java.util.HashMap; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatWriter; import com.google.zxing.WriterException; import com.google.zxing.client.j2se.MatrixToImageWriter; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; //生成二维码 public class CreateQRCode { public static void main(String[] args) { //图片的宽度和高度 int width = 300; int height = 300; //图片的格式 String format = "png"; //内容,此处放你想要放的内容(例如网页链接),若是网址链接,要加上 "http://" 才能被微信识别, //这里我放了一个自己写的获取IP地址和访问量的小demo String content = "http://www.zclong.cn/IPCount/show.jsp"; //定义二维码的参数 HashMap hints = new HashMap(); //编码 hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); //容错等级,与二维码存储的大小有关,一般选择M hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M); //边距 hints.put(EncodeHintType.MARGIN, 2); //生成二维码 try { BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints); //存放二维码路径 Path file = new File("F:/code/img.png").toPath(); MatrixToImageWriter.writeToPath(bitMatrix, format, file); } catch (Exception e) { e.printStackTrace(); } } }
- 上述代码是用来创建二维码的,运行可得二维码
- 接下来我们创建一个类ReadQRCode来解析二维码
package cn.zclong.zxing; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.HashMap; import javax.imageio.ImageIO; import com.google.zxing.BinaryBitmap; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatReader; import com.google.zxing.NotFoundException; import com.google.zxing.Result; import com.google.zxing.client.j2se.BufferedImageLuminanceSource; import com.google.zxing.common.HybridBinarizer; //解析二维码 public class ReadQRCode { public static void main(String[] args) { try { MultiFormatReader multiFormatReader = new MultiFormatReader(); //二维码的存放位置 File file = new File("F:/code/img.png"); //创建一个图片缓冲区 BufferedImage image = ImageIO.read(file); //对图片进行解析 BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image))); //定义二维码的参数 HashMap hints = new HashMap(); //编码 hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); //得到解析后的result Result result = multiFormatReader.decode(binaryBitmap, hints); System.out.println("解析结果:" + result.toString()); System.out.println("二维码格式类型·:" + result.getBarcodeFormat()); System.out.println("解析结果:" + result.getText()); } catch (NotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
- 编译运行得到结果如下:
解析结果:http://www.zclong.cn/IPCount/show.jsp
二维码格式类型:QR_CODE
解析结果:http://www.zclong.cn/IPCount/show.jsp
以上便是利用第三方jar包zxing来制作和解析二维码
三、接下来介绍利用javascript,如jquery.qrcode.js来生成二维码,这种方法比上述方法更为方便,快捷
1.首先先要下载jquery.min.js和jquery.qrcode.min.js
2.创建一个javaweb项目,引入上述的两个js
3.创建一个qrcode.jsp
4.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>生成二维码</title>
<script type="text/javascript" src="<%=request.getContextPath() %>/js/jquery.min.js"></script>
<script type="text/javascript" src="<%=request.getContextPath() %>/js/jquery.qrcode.min.js"></script>
</head>
<body>
生成二维码如下:<br>
<div id="qrcode"></div>
<script type="text/javascript">
jQuery('#qrcode').qrcode("http://www.zclong.cn/IPCount/show.jsp");
</script>
</body>
</html>
5.然后启动tomcat,运行该项目即可生成二维码,这种方法相对第一种方法而言更为快捷方便,而大多数我们也是使用这种方法来生成二维码
四、以上便是生成二维码的两种方式,大家可以去尝试一下制作自己的二维码,若想要制作个性的二维码,可以利用Bootstrap去设计logo,个性化图片等,这里就不一一介绍了,希望这篇文章对需要者有所帮助。
附上制作二维码所需要的资料:https://git.oschina.net/zclong/qrcode.git