本篇介紹通過C#生成和讀取一維碼、二維碼的操作。
目錄
1. 介紹:介紹條形碼、條形碼的分類以及ZXing.Net類庫。
2. 一維碼操作:包含對一維碼的生成、讀取操作。
3. 二維碼操作:包含對二維碼的生成、讀取操作,以及生成帶Logo的二維碼。
4. 源碼下載:展示運行圖及源碼下載。
1. 介紹
1.1 條形碼
條形碼(barcode):是將寬度不等的多個黑條和空白,按照一定的編碼規則排列,用以表達一組信息的圖形標識符。
1.2 條形碼分類
可分爲一維條形碼和二維條形碼:
一維條形碼:只是在一個方向(一般是水平方向)表達信息,而在垂直方向則不表達任何信息。
二維條形碼:在水平和垂直方向的二維空間存儲信息的條形碼。
1.3 第三方類庫:ZXing.Net
1.3.1 說明
ZXing 是一個可生成和讀取 1D/2D(1維/2維) 條形碼的開源類庫。原先是Java版本,後由第三方衍生了支持QT、C++、.Net等版本。
.Net版本支持的平臺:.Net 2.0, 3.5 and 4.0、Silverlight 4 and 5、Windows Phone 7.0, 7.1 and 8.0、Windows CE、Unity3D、Xamarin.Android 等等。
1.3.2 下載地址
Java 版本:https://github.com/zxing/zxing
ZXing.Net 版本:http://zxingnet.codeplex.com/
2. 一維碼操作
2.1 介紹
一維條形碼:只是在一個方向(一般是水平方向)表達信息,而在垂直方向則不表達任何信息。
常用碼制:EAN碼、39碼、交叉25碼、UPC碼、128碼、93碼,ISBN碼及Codabar(庫德巴碼)等。
國內推行使用的是EAN商品條形碼,可分爲EAN-13(標準版)和EAN-8(縮短版)兩種。
例圖:
2.2 生成一維碼
以生成EAN-13碼製爲例:
1 2 3 4 5 6 7 8 9 10 11 12 | // 1.設置條形碼規格 EncodingOptions encodeOption = new EncodingOptions(); encodeOption.Height = 130; // 必須制定高度、寬度 encodeOption.Width = 240; // 2.生成條形碼圖片並保存 ZXing.BarcodeWriter wr = new BarcodeWriter(); wr.Options = encodeOption; wr.Format = BarcodeFormat.EAN_13; // 條形碼規格:EAN13規格:12(無校驗位)或13位數字 Bitmap img = wr.Write( this .ContentTxt.Text); // 生成圖片 string filePath = System.AppDomain.CurrentDomain.BaseDirectory + "\\EAN_13-" + this .ContentTxt.Text + ".jpg" ; img.Save(filePath, System.Drawing.Imaging.ImageFormat.Jpeg); |
2.3 讀取一維碼
以讀取EAN-13碼制的圖片爲例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | // 1.設置讀取條形碼規格 DecodingOptions decodeOption = new DecodingOptions(); decodeOption.PossibleFormats = new List<BarcodeFormat>() { BarcodeFormat.EAN_13, }; // 2.進行讀取操作 ZXing.BarcodeReader br = new BarcodeReader(); br.Options = decodeOption; ZXing.Result rs = br.Decode( this .barCodeImg.Image as Bitmap); if (rs == null ) { this .ContentTxt.Text = "讀取失敗" ; MessageBox.Show( "讀取失敗" ); } else { this .ContentTxt.Text = rs.Text; MessageBox.Show( "讀取成功,內容:" + rs.Text); } |
3. 二維碼操作
3.1 介紹
二維碼:在水平和垂直方向的二維空間存儲信息的條形碼。
常用碼制:PDF417、QR Code、Code 49、Code 16K、Code One等。
例圖:
3.2 生成二維碼
以生成QR碼製爲例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | // 1.設置QR二維碼的規格 ZXing.QrCode.QrCodeEncodingOptions qrEncodeOption = new ZXing.QrCode.QrCodeEncodingOptions(); qrEncodeOption.CharacterSet = "UTF-8" ; // 設置編碼格式,否則讀取'中文'亂碼 qrEncodeOption.Height = 200; qrEncodeOption.Width = 200; qrEncodeOption.Margin = 1; // 設置周圍空白邊距 // 2.生成條形碼圖片並保存 ZXing.BarcodeWriter wr = new BarcodeWriter(); wr.Format = BarcodeFormat.QR_CODE; // 二維碼 wr.Options = qrEncodeOption; Bitmap img = wr.Write( this .ContentTxt.Text); string filePath = System.AppDomain.CurrentDomain.BaseDirectory + "\\QR-" + this .ContentTxt.Text + ".jpg" ; img.Save(filePath, System.Drawing.Imaging.ImageFormat.Jpeg); |
3.3 讀取二維碼
以讀取QR碼制的圖片爲例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | // 1.設置讀取條形碼規格 DecodingOptions decodeOption = new DecodingOptions(); decodeOption.PossibleFormats = new List<BarcodeFormat>() { BarcodeFormat.QR_CODE, ; // 2.進行讀取操作 ZXing.BarcodeReader br = new BarcodeReader(); br.Options = decodeOption; ZXing.Result rs = br.Decode( this .barCodeImg.Image as Bitmap); if (rs == null ) { this .ContentTxt.Text = "讀取失敗" ; MessageBox.Show( "讀取失敗" ); } else { this .ContentTxt.Text = rs.Text; MessageBox.Show( "讀取成功,內容:" + rs.Text); } |
3.4 生成帶Logo的二維碼
二維碼帶有校驗功能,故可以在中間區域展示一定尺寸的圖片。
例圖:
代碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | // 1.設置QR二維碼的規格 ZXing.QrCode.QrCodeEncodingOptions qrEncodeOption = new ZXing.QrCode.QrCodeEncodingOptions(); qrEncodeOption.CharacterSet = "UTF-8" ; // 設置編碼格式,否則讀取'中文'亂碼 qrEncodeOption.Height = 200; qrEncodeOption.Width = 200; qrEncodeOption.Margin = 1; // 設置周圍空白邊距 // 2.生成條形碼圖片 ZXing.BarcodeWriter wr = new BarcodeWriter(); wr.Format = BarcodeFormat.QR_CODE; // 二維碼 wr.Options = qrEncodeOption; Bitmap img = wr.Write( this .ContentTxt.Text); // 3.在二維碼的Bitmap對象上繪製logo圖片 Bitmap logoImg = Bitmap.FromFile(System.AppDomain.CurrentDomain.BaseDirectory + "\\logo.jpg" ) as Bitmap; Graphics g = Graphics.FromImage(img); Rectangle logoRec = new Rectangle(); // 設置logo圖片的大小和繪製位置 logoRec.Width = img.Width / 6; logoRec.Height = img.Height / 6; logoRec.X = img.Width / 2 - logoRec.Width / 2; // 中心點 logoRec.Y = img.Height / 2 - logoRec.Height / 2; g.DrawImage(logoImg, logoRec); // 4.保存繪製後的圖片 string filePath = System.AppDomain.CurrentDomain.BaseDirectory + "\\QR-" + this .ContentTxt.Text + ".jpg" ; img.Save(filePath, System.Drawing.Imaging.ImageFormat.Jpeg); |
4. 源碼下載
4.1 運行圖
4.2 下載地址
百度網盤:http://pan.baidu.com/s/1qWRJMAo
CSDN:http://download.csdn.net/detail/polk6/9383226
轉載自:http://www.cnblogs.com/polk6/p/5052786.html#Menu4-CodeDown