基於java生成二維碼
二維碼
- 二維碼的概念
二維條碼/二維碼是用某種特定的集合圖形按照一定規律在平面(二維方向上)分布的黑白相間的圖形記錄數據符號信息的圖形 -
二維碼的起源
二維碼技術誕生於20世紀40年代,但得到實際應用和迅速發展還是在近20年間。在通用商品條碼的應用系統中,最先采用的是一維碼,國外對二維碼技術的研究始於20世紀80年代,在二維碼符號表示技術研究方面,已研制出多種碼制,常見的有PDF417,QR Code,Code 49,Code 16K,Code One等。這些二維碼的密度都比傳統的一維碼有了較大的提高。專家介紹說,在二維碼標準化研究方面,國際自動識別制造商協會(AIM)、美國標準化協會(ANSI)已完成了PDF417,QR Code,Code 49,Code 16K,Code One等碼制的符號標準。在二維碼設備開發研制、生產方面,美國、日本等國的設備制造商生產的識讀設備、符號生成設備,已廣泛應用於各類二維碼應用系統。
3.二維碼的分類
1.線性堆疊式二維碼
2.矩陣式二維碼
3.郵政碼
4.二維碼的優缺點
優點:
1.高密度編碼,信息容量大
2.編碼範圍廣
3.容錯能力強
4.譯碼可靠性高
5.可引入加密措施
6.低成本,易制作,持久耐用
缺點:
1.二維碼技術成為手機病毒、釣魚網站傳播的渠道
2.信息泄露
5.二維碼特點
6.三種實現制作二維碼
方法一:借助第三方jar:zxing
- 先到官網下載zxing-zxing壓縮文件,並解壓(網址:htto://github.com/zxing/)
- 獲得zxing.jar包。這裏可以先在myeclipes中新建一個java項目,將zxing-zxing-3.3.0\core\src\main\java\com的com文件夾
與zxing-zxing-3.3.0\javase\src\main\java\com的com文件夾拷進src項目下,點擊Export導出jar包,命名為zxing.jar包
3.生成二維碼
新建一個java項目,並新建一個lib文件夾,將zxing.jar包copy進lib文件夾
/**
* 生成二維碼
* @author 佳先森
*
*/
public class CreateQRCode {
public static void main(String[] args) {
int width=300;
int height=300;
String format="png";
String content="www.baidu.com";
//定義二維碼的參數
HashMap hints=new HashMap();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
//設置錯誤等級:L為最小,M為中,Q偏大,H最大,等級越大,所存儲內容越小
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("D:/zwing/img.png").toPath();
MatrixToImageWriter.writeToPath(bitMatrix, format, file);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
4.解析二維碼
/**
* 解析二維碼
* @author 佳先森
*
*/
public class ReadQRCode {
public static void main(String[] args) {
MultiFormatReader formatReader=new MultiFormatReader();
File file=new File("D:/zwing/img.png");
BufferedImage image;
try {
image = ImageIO.read(file);
//定義二維碼的參數
HashMap hints=new HashMap();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
BinaryBitmap binaryBitmap=new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));
Result result=formatReader.decode(binaryBitmap);
System.out.println("解析結果如下:"+result.toString());
System.out.println("二維碼格式類型:"+result.getBarcodeFormat());
System.out.println("二維碼文本內容:"+result.getText());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
5.在指定的文件夾下可以看到所生成的二維碼
方法二:借助qecode.jar包(這裏不演示)
方法三:JavaScript
- 先到官網下載jquery-qrcode壓縮文件(網址:https://github.com/jeromeetienne/jquery-qrcode)
- 新建一個java-web項目,並在WebRoot下新建一個js文件夾,將解壓後的文件夾的jquery.qrcode.min.js放進js文件,再另外下載好的jquery 放進js文件夾
- 制作一個顯示二維碼的jsp界面
1.導入兩個js文件
<script type="text/javascript" src="<%=request.getContextPath()%>/js/jquery-1.8.2.js"></script>
<script type="text/javascript" src="<%=request.getContextPath()%>/js/jquery.qrcode.min.js"></script>
2.編寫生成二維碼代碼
<body>
<h3>生成的二維碼如下</h3>
<div id="qrcode"></div>
<script type="text/javascript">
jQuery(‘#qrcode‘).qrcode("http://www.baidu.com");
</script>
</body>
4.通過瀏覽器輸入域名訪問查看二維碼
7.擴展:
1.註意訪問的內容寫法
若寫成:www.baidu.com 只能視為文本
若寫成: http://www.baidu.com 直接通過鏈接進入官網
2.實現二維碼實現二維碼掃描名片,得遵守VCard標準
基於java生成二維碼