1. 程式人生 > >簡單製作屬於自己的二維碼

簡單製作屬於自己的二維碼

一、二維碼的簡介 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二、
  1. jar包zxing的地址: http://github.com/zxing/
  2. 得到該jar包後開啟eclipse,建立一個java專案,匯入jar包zxing。
  3. 建立一個生成二維碼的類CreateQRCode
  4. 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();
    		}
    	}
    
    }
    


  5. 上述程式碼是用來建立二維碼的,執行可得二維碼
  6. 接下來我們建立一個類ReadQRCode來解析二維碼
  7. 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();
    		}
    		
    	}
    
    
    }


  8. 編譯執行得到結果如下:
            解析結果: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