Java 騷操作--生成二維碼
好久沒發布博客了,今天發了一個Java工具類,突然發現草稿箱竟然還有以前的存貨,一次性發了!!!
目錄 1.二維碼概念 2.二維碼發展歷史 3.二維碼分類 4.二維碼優缺點 5.QR Code
1.二維碼又稱 二維條碼 (2-dimensional bar code)是用某種特定的幾何圖形按一定規律在平面(二維碼上)分布的黑白相間的圖形記錄數據符號信息的圖形。
2二維碼發展歷史
1.20世紀20年代 約翰 科芒德實現郵政單據自動分揀方法,
2.1949年美國喬 伍德蘭德 伯尼西爾沃發明第一個條碼專利,
3.1959年 吉拉德 費伊塞爾申請了用條形碼表示數字的專利,
4.60年代 西爾沃尼亞發明一套條形碼系統並在北美鐵路系統成功應用,
5.70年代,UPC碼(Universal Product Code)在北美超市得到廣泛應用,
6.1988年中國成立了中國物品編碼中心,80年代未國外研制出二維碼,
7.1997年到2000年確定了國家標準
3.二維碼分類
1. 一維條碼是由一組粗細不同,黑白(或彩色)相間的條,空及其相符的字符(數字字母)組成的標記,即傳統條碼。
2. 二維條碼是用某種特定的幾何圖形按一定規律在平面(二維碼上上分布的條,空間的圖形來記錄數據符號信息
二維條碼也有許多不同的碼制,就碼制的編碼原理而言,通常分為三種
類型:
1.線性堆疊式二維碼
編碼原理: 建立在一維條碼基礎上,按需要堆積成兩行或多行。
2.矩陣式二維碼
在一個矩形空間通過黑,白像素在矩陣中的不同分布進行編碼的出現表示二進制“1”點的不出現表示二進制的“0”
3.郵政碼
郵政碼通過不同長度的條進行編碼,主要用於郵件編碼,
POSTNET、
BPO 4-STATE。
4. 二維碼優缺點
5. QR Code
目前流行的三大國標準:
PDE417:不支持中文
DM:專利未公開,需要支付專利費用
QR Code:專利公開,支持中文
QR Code比其他二維碼相比,具有識讀速度快,數據度大,占用空間小的優勢。
QR Code 是由日本Denso公司於1994年研制的一種矩陣二維碼符號碼,全稱是Quick Response Code。
糾錯能力
L級: 約可糾錯7%的數據碼字M級: 約可糾錯15%的數據碼字Q級: 約可糾錯25%的數據碼字H級: 約可糾錯30%的數據碼字
6. 二維碼制作:Java語言開發
首先引入zxing的jar包
jar包:鏈接:https://pan.baidu.com/s/1GzjQOqWhZYPsL0uzf569dw 密碼:kril
詳細操作:
package cn.code; 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.client.j2se.MatrixToImageWriter; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; /** * * @author: 房上的貓 * * @time: 下午11:38:45 * * @博客地址: https://www.cnblogs.com/lsy131479/ * * 生成二維碼 */ public class Zxing { public static void main(String[] args) { Zxing zxing = new Zxing(); // 傳參:二維碼內容和生成路徑 if (zxing.orCode("https://www.cnblogs.com/lsy131479/", "F:\\1.jpg")) { System.out.println("ok,成功"); } else { System.out.println("no,失敗"); } } private boolean orCode(String content, String path) { /* * 圖片的寬度和高度 */ int width = 300; int height = 300; // 圖片的格式 String format = "png"; // 二維碼內容 // String content = "hello,word"; // 定義二維碼的參數 HashMap hints = new HashMap(); // 定義字符集編碼格式 hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); // 糾錯的等級 L > M > Q > H 糾錯的能力越高可存儲的越少,一般使用M hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M); // 設置圖片邊距 hints.put(EncodeHintType.MARGIN, 2); try { // 最終生成 參數列表 (1.內容 2.格式 3.寬度 4.高度 5.二維碼參數) BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints); // 寫入到本地 Path file = new File(path).toPath(); MatrixToImageWriter.writeToPath(bitMatrix, format, file); return true; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); return false; } } }
二維碼生成還有其他方式生成,今天這裏將不再講解,如果有興趣的可以關註一下作者,後續會持續出教程的
其他方式:
1.or code 生成及解析
2.jQuery-qrcode 生成及解析
Java 騷操作--生成二維碼