本文由來源網絡的知識點組合而成,感謝分享的做者,文章結尾處給出查詢資料鏈接。html
條形碼(barcode)是將寬度不等的多個黑條和空白,按照必定的編碼規則排列,用以表達一組信息的圖形標識符。常見的條形碼是由反射率相差很大的黑條(簡稱條)和白條(簡稱空)排成的平行線圖案。條形碼能夠標出物品的生產國、製造廠家、商品名稱、生產日期、圖書分類號、郵件起止地點、類別、日期等許多信息,於是在商品流通、圖書管理、郵政管理、銀行系統等許多領域都獲得普遍的應用。數據庫
二維碼(Quick Response Code),又稱二維條碼,它是用特定的幾何圖形按必定規律在平面(二維方向)上分佈的黑白相間的圖形,是全部信息數據的一把鑰匙。在現代商業活動中,可實現的應用十分普遍,如:產品防僞/溯源、廣告推送、網站連接、數據下載、商品交易、定位/導航、電子商務應用、車輛管理、信息傳遞等網絡
本文示例中使用了zxing連接庫:asp.net
1,添加引用和命名空間網站
using com.google.zxing; using com.google.zxing.qrcode.decoder; using COMMON = com.google.zxing.common;
2,二維碼和條形碼生成方法(生成圖片)ui
public static Bitmap toBitmap(COMMON.ByteMatrix matrix, string scolor, string qcolor) { int width = matrix.Width; int height = matrix.Height; Bitmap bmap = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { bmap.SetPixel(x, y, matrix.get_Renamed(x, y) != -1 ? ColorTranslator.FromHtml(scolor) : ColorTranslator.FromHtml(qcolor)); } } return bmap; }
public static void CreateQRCode(string strContent, ref Image QRImage)//二維碼
{ try { string Scolor = "0xFF000000";//二維碼顏色 string Qcolor = "0x00FFFFFF";//背景顏色 Hashtable hints = new Hashtable(); var error = ErrorCorrectionLevel.M; hints.Add(EncodeHintType.ERROR_CORRECTION, error); COMMON.ByteMatrix byteMatrix1 = new MultiFormatWriter().encode(strContent, BarcodeFormat.QR_CODE, 200, 200, hints); QRImage = MyCommon.toBitmap(byteMatrix1, Scolor, Qcolor);//MyCommon是個人類名 } catch (Exception ex) { MessageBox.Show(ex.Message); } } public static void CreateQRCode(string strContent, ref Image QRImage)//條形碼,EAN13碼 { try { string Scolor = "0xFF000000";//條碼顏色 string Qcolor = "0x00FFFFFF";//背景顏色 Hashtable hints = new Hashtable(); var error = ErrorCorrectionLevel.M; hints.Add(EncodeHintType.ERROR_CORRECTION, error); COMMON.ByteMatrix byteMatrix2 = new MultiFormatWriter().encode(strContent, BarcodeFormat.EAN_13, 300, 80); QRImage = MyCommon.toBitmap(byteMatrix2, Scolor, Qcolor);//MyCommon是個人類名 } catch (Exception ex) { MessageBox.Show(ex.Message); } }
3 二維碼或條碼的存儲this
在實際工做中,經常須要存儲二維碼或條碼,這裏提供一種存儲方式,將二維碼或條碼轉換成二進制字符串,並保存在數據庫便可google
using System.Drawing; using System.Drawing.Drawing2D; using System.IO; public static byte[] BinaryPhoto(String FileName) { FileStream fs = new FileStream(FileName, FileMode.Open, FileAccess.Read); BinaryReader br = new BinaryReader(fs); byte[] pByte = br.ReadBytes((int)fs.Length); fs.Close(); return pByte; } public static Image ConvToPhoto(byte[] pByte) { MemoryStream ms = new MemoryStream(pByte, 0, pByte.Length); Image gImage = Image.FromStream(ms); ms.Close(); return gImage; }
注意:將二進制流數據存儲在數據庫中,須要先進行轉換將二進制數據轉換爲base64格式的字符串(獲取時須要解碼),不然會有驚喜。。編碼
4 二維碼增長logo.net
二維碼中間增長圖片的原理是利用二維碼的糾錯級別,在現有二維碼圖片容許的(logo)大小狀況下增長logo。
4.1二維碼的糾錯級別
var errCorrLvl = ErrorCorrectionLevel.M; var corrRatio = 0.15; switch (this.cbocorrection.SelectedIndex) { case 0: errCorrLvl = ErrorCorrectionLevel.L; corrRatio = 0.07; break; case 1: errCorrLvl = ErrorCorrectionLevel.M; corrRatio = 0.15; break; case 2: errCorrLvl = ErrorCorrectionLevel.Q; corrRatio = 0.25; break; case 3: errCorrLvl = ErrorCorrectionLevel.H; corrRatio = 0.30; break; }
4.2 判斷logo是否在容許範圍內
var logo = new Bitmap(this.txtLogoFile.Text); var ratio = (double)(logo.Width * logo.Height) / (double)(bitmap.Width * bitmap.Height); if (ratio < corrRatio * 0.6) // 標誌圖片大小最大隻能佔到最大容錯面積的60%以保證圖片高可讀性 { ………………………… }
4.3 增長logo方法
/// <summary>在二維碼位圖上繪製標誌。</summary> private void CreateQRCodeBitmapWithPortrait(Bitmap qrCode, Bitmap logo) { Graphics g = Graphics.FromImage(qrCode); // 設置頭像要顯示的位置,即居中顯示 int rectX = (qrCode.Width- logo.Width) / 2; int rectY = (qrCode.Height - logo.Height) / 2; g.DrawImage(logo, rectX, rectY); g.Dispose(); }
5 網絡資源
某度百科條形碼、二維碼
http://blog.csdn.net/suntongo/article/details/8742023
http://blog.csdn.net/nodbrag/article/details/12438411
http://www.cnblogs.com/xuhang/p/3831776.html
http://www.cnblogs.com/xuhang/p/3832118.html
http://www.cnblogs.com/rophie/archive/2012/03/02/2376946.html
http://www.cnblogs.com/mzlee/archive/2011/03/19/Lee_Barcode.html
http://www.cnblogs.com/Soar1991/archive/2012/03/30/2426115.html
http://www.cnblogs.com/lykbk/p/3818863.html (asp.net例子)
http://www.cnblogs.com/freeliver54/p/3430956.html(圖片存儲轉換)