前言
系列文章:[傳送門]
上幾周碌碌無為,不行啊不行啊。部落格園,不知道你幾時改版。老家了,我不會忘記你呢。呵呵,我也會在os,csdn更新的。每天一搏,不管有用沒用。
本文
本文先有項目起步,項目中的需求很明確。
利用二維碼掃描,然後實現簽到功能。
自然和app掛鈎。 沒事,一步一步來。
二維碼
二維碼(QR(Quick Response)code),又稱二維條碼,它是用特定的幾何圖形按一定規律在平面(二維方向)上分布的黑白相間的圖形,是所有資訊資料的一把鑰匙。
利用工具-zxing
ZXing是一個開放源碼的,用Java實現的多種格式的1D/2D條碼影像處理庫,它包含了聯絡到其他語言的連接埠。Zxing可以實現使用手機的內建的網路攝影機完成條碼的掃描及解碼。該項目可實現的條碼編碼和解碼
大家可以去瞭解
https://github.com/zxing/zxing/wiki/Getting-Started-Developing
二維碼(QRCode)的產生
/** * 產生二維碼圖片 * @param content 內容 * @param width 寬度 * @param height 高度 * @param imgPath 儲存圖片路徑 */
package sedion.jeffli.wmuitp.util.zxing;import java.io.File;import java.util.Hashtable;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 Jeff Lee */public class ZxingEncoderHelper { /** * 產生二維碼圖片 * @param content 內容 * @param width 寬度 * @param height 高度 * @param imgPath 儲存圖片路徑 */ public void encode(String content, int width, int height, String imgPath) { Hashtable<EncodeHintType, Object> hts = new Hashtable<EncodeHintType, Object>(); hts.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L); // 錯誤修正等級 hts.put(EncodeHintType.CHARACTER_SET, "utf-8"); // 指定編碼格式為UTF-8 try { BitMatrix bitMatrix = new MultiFormatWriter().encode(content, //編碼內容,編碼類別型(這裡指定為二維碼), BarcodeFormat.QR_CODE, width, height, hts); //圖片寬度,圖片高度,設定參數 MatrixToImageWriter .writeToFile(bitMatrix, "png", new File(imgPath)); //產生的二維碼圖片 } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { String imgPath = "d:/33.png"; String contents = "你好!我的部落格:http://www.cnblogs.com/Alandre/"; int width = 300, height = 300; ZxingEncoderHelper handler = new ZxingEncoderHelper(); handler.encode(contents, width, height, imgPath); }}
#BitMatrix 設定參數順序分別為:編碼內容,編碼類別型,產生圖片寬度,產生圖片高度,設定參數
#MatrixToImageWriter 產生所需要的檔案
你會找到這個圖片
二維碼(QRCode)的解碼
/** * 解碼 * @param imgPath 二維碼圖片路徑 * @return */
package sedion.jeffli.wmuitp.util.zxing;import java.awt.image.BufferedImage;import java.io.File;import java.util.Hashtable;import javax.imageio.ImageIO;import com.google.zxing.BinaryBitmap;import com.google.zxing.DecodeHintType;import com.google.zxing.LuminanceSource;import com.google.zxing.MultiFormatReader;import com.google.zxing.Result;import com.google.zxing.client.j2se.BufferedImageLuminanceSource;import com.google.zxing.common.HybridBinarizer;/** * @author Jeff Lee */public class ZxingDecoderHandler { /** * 解碼 * @param imgPath 二維碼圖片路徑 * @return */ public String decode(String imgPath) { BufferedImage image = null; Result result = null; try { image = ImageIO.read(new File(imgPath)); if (image == null) { System.out.println("檔案不存在!"); //應該拋個異常的 } LuminanceSource source = new BufferedImageLuminanceSource(image); BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>(); hints.put(DecodeHintType.CHARACTER_SET, "utf-8"); result = new MultiFormatReader().decode(bitmap, hints); return result.getText(); } catch (Exception e) { e.printStackTrace(); } return null; } public static void main(String[] args) { String imgPath = "d:/33.png"; ZxingDecoderHandler handler = new ZxingDecoderHandler(); String content = handler.decode(imgPath); System.out.println("內容如下:"); System.out.println(content); }}
#和產生的相反
總結
二維碼產生
二維碼解碼
感謝及資源共用
路上走來一步一個腳印,希望大家和我一起。
感謝讀者!很喜歡你們給我的支援。如果支援,點個贊。
知識來源: https://github.com/zxing/zxing/wiki/Getting-Started-Developing