简单制作属于自己的二维码

一、二维码的简介
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




        评论
        添加红包

        请填写红包祝福语或标题

        红包个数最小为10个

        红包金额最低5元

        当前余额3.43前往充值 >
        需支付:10.00
        成就一亿技术人!
        领取后你会自动成为博主和红包主的粉丝 规则
        hope_wisdom
        发出的红包
        实付
        使用余额支付
        点击重新获取
        扫码支付
        钱包余额 0

        抵扣说明:

        1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
        2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

        余额充值