C#條碼與二維碼

來源:互聯網
上載者:User

標籤:blog   http   io   color   ar   os   使用   sp   for   

        本文由來源網路的知識點組合而成,感謝分享的作者,文章結尾處給出查詢資料串連。

          條碼(barcode)是將寬度不等的多個黑條和空白,按照一定的編碼規則排列,用以表達一組資訊的圖形標識符。常見的條碼是由反射率相差很大的黑條(簡稱條)和白條(簡稱空)排成的平行線圖案。條碼可以標出物品的生產國、製造廠家、商品名稱、生產日期、圖書分類號、郵件起止地點、類別、日期等許多資訊,因而在商品流通、圖書管理、郵政管理、銀行系統等許多領域都得到廣泛的應用。

          二維碼(Quick Response Code),又稱二維條碼,它是用特定的幾何圖形按一定規律在平面(二維方向)上分布的黑白相間的圖形,是所有資訊資料的一把鑰匙。在現代商務工作中,可實現的應用十分廣泛,如:產品防偽/溯源、廣告推送、網站連結、資料下載、商品交易、定位/導航、電子商務應用、車輛管理、資訊傳遞等

        本文樣本中使用了zxing連結庫:

        1,添加引用和命名空間

using com.google.zxing;using com.google.zxing.qrcode.decoder;using COMMON = com.google.zxing.common;

  2,二維碼和條碼產生方法(產生圖片)

        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); } 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); } catch (Exception ex) { MessageBox.Show(ex.Message); } }

      3 二維碼或條碼的儲存

        在實際工作中,常常需要儲存二維碼或條碼,這裡提供一種儲存方式,將二維碼或條碼轉換成二進位字串,並儲存在資料庫即可

          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

        二維碼中間增加圖片的原理是利用二維碼的錯誤修正層級,在現有二維碼圖片允許的(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 qsize = Int32.Parse(textBox1.Text);            // 設定頭像要顯示的位置,即置中顯示            int rectX = (qsize- logo.Width) / 2;            int rectY = (qsize - logo.Height) / 2;            g.DrawImage(logo, rectX, rectY);            g.Dispose();        }

  

5 網路資源

 某度百科條碼、二維碼

 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://blog.csdn.net/suntongo/article/details/8742023

http://www.cnblogs.com/mzlee/archive/2011/03/19/Lee_Barcode.html

http://www.cnblogs.com/Soar1991/archive/2012/03/30/2426115.html

 

C#條碼與二維碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.