初級(上) 二維碼的生成
阿新 • • 發佈:2019-01-12
吼吼,陽仔的第一篇部落格開寫啦,以下的內容都是我從imooc上面聽課的總結,當然是只針對二維碼,作為一個初級程式媛,也是要堅持學習的。
首先,謝謝imooc網上的老師發放的免費視訊,讓我自己有了一些簡單的瞭解,
接下來,就把我的總結貼出來吧:
第一
線性堆疊式二維碼:建立在一條維碼基礎之上,按需要堆積成兩條或多條,主要有:pdf417 ultraclode code 49 code16k
矩陣式二維碼:QRCode
郵政碼
為什麼QRCode是最長用到的呢?
下面舉些常用的二維碼格式進行對比:
PDF417:不支援中文 DM:專利未公開,需支付專利費用 QR code:專利公開,支援中文。
接下來介紹一下QRCode:
QR Code 是由日本Denso公司於1994年研製的一種矩陣二維碼符號碼, 全稱是:quick response code
M級:15%
Q級:25%
H級:30%
糾錯能力越高,可儲存的就越少
生成二維碼的三種方式:
01: 藉助第三方jar:zxing(谷歌研發的)和qrcodejar
例項: https://github.com/zxing/ 下載原始碼
01.01提取zxing-zxing-3.3.0 中core包和javase包中的com資料夾下的內容,
有很多android的資料夾,可以不用管,忽略。因為,咱主要不是那個方向的
01.02 eclipse新建java project 命名為zxing(這個當然是自己想取什麼就取什麼名字)
src目錄下面將zxing-zxing-3.3.0 中core包和javase包中的com資料夾下的內容放了進去
01.03 將zxing專案匯出jar包
01.04 新建java project 並將之前打的zxing.jar放入其中
01.05
接下來開始編碼啦:
生成二維碼
package com.imooc.zxing;
import java.io.File;
import java.io.UnsupportedEncodingException;
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;
/**
* 生成二維碼
*
* @author yuliyang
* @version $Id: CreateQRCode.java, v 0.1 2016年11月13日 下午1:26:37 陽仔 Exp $
*/
public class CreateQRCode {
public static void main(String[] args) throws UnsupportedEncodingException {
int width =300;
int height = 300;
//圖片格式
String format = "png";
//內容
String content = "www.baidu.com";
//定義二維碼
HashMap map = new HashMap();
//字元
map.put(EncodeHintType.CHARACTER_SET, "gb2312");
//糾錯能力
map.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
//邊框大小
map.put(EncodeHintType.MARGIN, 2);
//開始生成
try {
BitMatrix bitMatrix = new MultiFormatWriter().encode(
content, BarcodeFormat.QR_CODE, width, height);
File file = new File("D:/zxingimg/img1.png");
//如果檔案不存在,則建立
if(!file.exists()){
file.mkdirs();
}
MatrixToImageWriter.writeToFile(bitMatrix, format, file);
} catch (Exception e) {
e.printStackTrace();
}
}
}
直接執行之後,在你的D:/zxingimg 目錄下面就會看見img.png 了,拿出手機掃一掃,就可以了
是不是超級簡單。。。。
二:我們還可以解析二維碼:
package com.imooc.zxing;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.HashMap;
import javax.imageio.ImageIO;
import com.google.zxing.Binarizer;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.EncodeHintType;
import com.google.zxing.LuminanceSource;
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.BitArray;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
/**
* 解析二維碼圖片
*
* @author yuliyang
* @version $Id: ReadQRCode.java, v 0.1 2016年11月13日 下午2:19:38 陽仔 Exp $
*/
public class ReadQRCode {
public static void main(String[] args) {
try {
MultiFormatReader formatReader = new MultiFormatReader();
//獲取二維碼圖片
File file = new File("D:/zxingimg/qrcode1.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 = formatReader.decode(binaryBitmap, hints);
System.out.println("解析結果:"+result.toString());
System.out.println("二維碼格式型別:"+result.getBarcodeFormat());
System.out.println("二維碼文字內容:"+result.getText());
} catch (Exception e) {
e.printStackTrace();
}
}
}
解析結果:
ok 到現在為止,第一種方法就成功啦!!!