摘要:時間年月日星期五說明本文部分內容均來自慕課網(wǎng)。線性堆疊式二維碼示意圖矩陣式二維碼在一個矩形空間通過黑白像素在矩陣中的不同分布進行編碼。
時間:2017年06月23日星期五
說明:本文部分內容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com
教學示例源碼:無
個人學習源碼:https://github.com/zccodere/s...
二維碼示意圖
使用場景
目錄
二維碼概念 二維碼發(fā)展歷史 二維碼分類 二維碼優(yōu)缺點 QR Code 示例講解
二維碼概念
二維條碼/二維碼(2-dimensional bar code)是用某種特定的幾何圖形按一定規(guī)律在平面(二位方向上)分布的黑白相間的圖形記錄數(shù)據(jù)符號信息的圖形。第二章:二維碼發(fā)展歷史 2-1 二維碼發(fā)展歷史
發(fā)展歷史
一維條碼
一維條碼是由一組粗細不同、黑白(或彩色)相間的條、空及其相應的字符(數(shù)字字母)組成的標記,即傳統(tǒng)條碼。
一維條碼示意圖
二維條碼
二維條碼是用某種特定的幾何圖形按一定規(guī)律在平面(二維方向)上分布的條、空相間的圖形來記錄數(shù)據(jù)符號信息。
二維條碼示意圖
第三章:二維碼分類 3-1 二維碼分類二維條碼也有許多不同的碼制,就碼制的編碼原理而言,通常分為三種類型:
1.線性堆疊式二維碼 2.矩陣式二維碼 3.郵政碼
線性堆疊式二維碼
編碼原理:建立在一維條碼基礎之上,按需要堆積成兩行或多行。
線性堆疊式二維碼示意圖
矩陣式二維碼
在一個矩形空間通過黑、白像素在矩陣中的不同分布進行編碼。 在矩陣相應元素位置上,用點(方點、圓點或其他形狀)的出現(xiàn)表示二進制“1”,點的不出現(xiàn)表示二進制的“0”
矩陣式二維碼示意圖
郵政碼
郵政碼通過不同長度的條進行編碼,主要用于郵件編碼,如:POSTNET、BPO 4-STATE第四章:二維碼優(yōu)缺點 4-1 二維碼優(yōu)缺點
優(yōu)點
高密度編碼,信息容量大 (多達1850個大寫字母或2710數(shù)字或1108個字節(jié)或500個漢字) 編碼范圍廣 可以把圖片、文字、指紋,可以數(shù)字化的信息都可以進行編碼,用條碼顯示出來 容錯能力強 譯碼可靠性高 可引入加密措施 成本低、易制作、持久耐用
缺點
二維碼技術成為手機病毒、釣魚網(wǎng)站傳播的新渠道 信息泄露第五章:QR Code 5-1 QR Code
目前流行的三大國際標準:
PDF417:不支持中文 DM:專利未公開,需支付專利費用 QR Code:專利公開,支持中文
QR Code比其他二維碼相比具有的優(yōu)勢
識讀速度快 數(shù)據(jù)密度大 占用空間小
QR Code是由日本Denso公司于1994年研制的一種矩陣二維碼符號嗎,全稱是Quick Response Code
示意圖
JSP生成二維碼的方法
借助第三方jar,如zxing和qrcodejar Javascript,如jquery.qrcode.js第六章:實例講解 6-1 實例講解前準備
zxing地址
https://github.com/zxing/zxing
Maven坐標
6-2 使用zxing生成二維碼com.google.zxing core 3.3.0 com.google.zxing javase 3.3.0
代碼演示:
package com.myimooc.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.client.j2se.MatrixToImageWriter; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; /** * 生成 二維碼 * @author ZhangCheng on 2017-06-23 */ public class CreateQRCode { public static void main(String[] args) { // 定義圖片的寬度和高度 int width = 300; int height = 300; // 定義圖片的格式 String format = "png"; // 定義二維碼的內容 String contents = "www.imooc.com"; Path file = new File("D:/img.png").toPath(); // 定義二維碼的參數(shù) HashMap6-3 使用zxing進行二維碼解析hints = new HashMap (); hints.put(EncodeHintType.CHARACTER_SET, "utf-8");// 設置字符編碼 hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);// 設置容錯等級 hints.put(EncodeHintType.MARGIN, 2);// 設置邊距(默認值5) // 生成二維碼 try { BitMatrix bitMatrix = new MultiFormatWriter().encode(contents, BarcodeFormat.QR_CODE, width, height,hints); MatrixToImageWriter.writeToPath(bitMatrix, format, file); } catch (Exception e) { e.printStackTrace(); } } }
代碼演示:
package com.myimooc.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; /** * 讀取 二維碼 * @author ZhangCheng on 2017-06-23 */ public class ReadQRCode { @SuppressWarnings({ "unchecked", "rawtypes" }) public static void main(String[] args) { MultiFormatReader formatReader = new MultiFormatReader(); // 定義二維碼文件路徑 File file = new File("D:/img.png"); // 讀取圖片文件識別為一個圖片流 BufferedImage image; try { image = ImageIO.read(file); BinaryBitmap binaryBitmap = new BinaryBitmap( new HybridBinarizer( new BufferedImageLuminanceSource(image))); // 定義二維碼的參數(shù) HashMap hints = new HashMap(); hints.put(EncodeHintType.CHARACTER_SET, "utf-8");// 設置字符編碼 // 解析二維碼 Result result = formatReader.decode(binaryBitmap,hints); System.out.println("解析結果:"+result.toString()); System.out.println("格式類型:"+result.getBarcodeFormat()); System.out.println("文本內容:"+result.getText()); } catch (IOException e) { e.printStackTrace(); } catch (NotFoundException e) { e.printStackTrace(); } } }6-4 使用QR Code方式生成和解析二維碼
QRCode
生成:http://www.swetake.com/qrcode/index-e.html 讀?。篽ttps://osdn.jp/projects/qrcode/
代碼演示
1.生成二維碼
package com.myimooc.qrcode; import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import com.swetake.util.Qrcode; /** * 生成 二維碼 通過 Qrcode * * @author ZhangCheng on 2017-06-23 */ public class CreateQRCode { public static void main(String[] args) throws Exception { Qrcode x = new Qrcode(); // 二維碼顯示的內容 String qrData = "www.imooc.com"; int version = 7; int width = 67 + 12 * (version - 1); int height = 67 + 12 * (version - 1); // 設置二維碼排錯率,可選L(7%)、M(15%)、Q(25%)、H(30%),排錯率越高可存儲的信息越少,但對二維碼清晰 x.setQrcodeErrorCorrect("M");// 糾錯等級 x.setQrcodeEncodeMode("B");// N代表數(shù)字,A代表z-Z,B代表其他字符 // 設置設置版本號,取值范圍1-40,值越大尺寸越大,可存儲的信息越大 x.setQrcodeVersion(version); BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR); Graphics2D gs = bufferedImage.createGraphics(); // 設置屬性 gs.setBackground(Color.WHITE); gs.setColor(Color.BLACK); gs.clearRect(0, 0, width, height); // 偏移量 int pixoff = 2; byte[] d = qrData.getBytes("gb2312"); if (d.length > 0 && d.length < 120) { boolean[][] s = x.calQrcode(d); for (int i = 0; i < s.length; i++) { for (int j = 0; j < s.length; j++) { if (s[j][i]) { gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3); } } } } gs.dispose(); bufferedImage.flush(); ImageIO.write(bufferedImage, "png", new File("D:/qrcode.png")); } }
2.讀取二維碼時,需實現(xiàn) QRCodeImage 接口
package com.myimooc.qrcode; import java.awt.image.BufferedImage; import jp.sourceforge.qrcode.data.QRCodeImage; /** * 讀取 二維碼 時,需實現(xiàn) QRCodeImage 接口 * * @author ZhangCheng on 2017-06-23 */ public class MyQRCodeImage implements QRCodeImage{ BufferedImage bufferedImage; public MyQRCodeImage(BufferedImage bufferedImage){ this.bufferedImage = bufferedImage; } @Override public int getHeight() { return bufferedImage.getHeight(); } @Override public int getPixel(int arg0, int arg1) { return bufferedImage.getRGB(arg0, arg1); } @Override public int getWidth() { return bufferedImage.getWidth(); } }
3.讀取二維碼
package com.myimooc.qrcode; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import jp.sourceforge.qrcode.QRCodeDecoder; /** * 讀取 二維碼 通過 Qrcode * * @author ZhangCheng on 2017-06-23 */ public class ReadQRCode { public static void main(String[] args) throws Exception { File file = new File("D:/qrcode.png"); BufferedImage bufferedImage = ImageIO.read(file); QRCodeDecoder codeDecoder = new QRCodeDecoder(); String result = new String(codeDecoder.decode(new MyQRCodeImage(bufferedImage)),"gb2312"); System.out.println(result); } }6-5 jquery-qrcode生成二維碼
jquery-qrcode
地址:https://github.com/jeromeetienne/jquery-qrcode
代碼演示:
生成二維碼 生成的二維碼如下:
效果如下:
6-6 其他形式的二維碼二維碼還可以這樣
6-7 二維碼擴展為什么我們的二維碼掃描出來是文本而不是鏈接?
如何實現(xiàn)二維碼掃描安裝手機軟件?以慕課網(wǎng)為例
如何實現(xiàn)二維碼掃描名片?
VCard是標準通信薄基本格式
VCard規(guī)范
代碼實現(xiàn)
第七章:課程總結 7-1 總結文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/67213.html
時間:2017年07月09日星期日說明:本文部分內容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學源碼:無學習源碼:https://github.com/zccodere/s... 第一章:概述 1-1 課程概述 主要內容 驗證碼歷史 課程內容 不同方案對比 設計與實現(xiàn) 總結 1-2 驗證碼歷史 驗證碼歷史 無驗證碼:垃圾騷擾 Luis von Ahn:Captcha 不斷...
摘要:時間年月日星期六說明本文部分內容均來自慕課網(wǎng)??梢愿訉W⒂跇I(yè)務邏輯開發(fā),縮短項目開發(fā)周期,提高項目開發(fā)速度。 時間:2017年07月15日星期六說明:本文部分內容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學源碼:無學習源碼:https://github.com/zccodere/s... 第一章:課程介紹 1-1 課程介紹 在用戶進行信息概略瀏覽的時候,提供縮...
摘要:時間年月日星期五說明本文部分內容均來自慕課網(wǎng)。本套課程介紹微信公眾號開發(fā),主要涉及公眾號介紹編輯模式介紹開發(fā)模式介紹等。慕課網(wǎng)是垂直的互聯(lián)網(wǎng)技能免費學習網(wǎng)站。 時間:2017年08月11日星期五說明:本文部分內容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學源碼:https://github.com/zccodere/s...學習源碼:https://github...
時間:2017年4月11日星期二說明:本文部分內容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學示例源碼:https://github.com/zccodere/s...個人學習源碼:https://github.com/zccodere/s... 第一章:對稱加密算法DES 1-1 JAVA對稱加密算法DES 加密密鑰=解密密鑰 對稱加密算法 初等 DES --3D...
摘要:時間年月日星期日說明本文部分內容均來自慕課網(wǎng)。慕課網(wǎng)教學示例源碼無個人學習源碼第一章課程概述課程介紹課程須知本課程面向所有使用語言進行開發(fā)的小伙伴。 時間:2017年05月21日星期日說明:本文部分內容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學示例源碼:無個人學習源碼:https://github.com/zccodere/s... 第一章:課程概述 1-1 ...
閱讀 1087·2021-11-24 09:39
閱讀 1319·2021-11-18 13:18
閱讀 2462·2021-11-15 11:38
閱讀 1840·2021-09-26 09:47
閱讀 1641·2021-09-22 15:09
閱讀 1634·2021-09-03 10:29
閱讀 1521·2019-08-29 17:28
閱讀 2961·2019-08-29 16:30