(整理).net實現條形碼與二維碼

        本文由來源網絡的知識點組合而成,感謝分享的做者,文章結尾處給出查詢資料鏈接。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(圖片存儲轉換)

相關文章
相關標籤/搜索