zoukankan      html  css  js  c++  java
  • (整理).net实现条形码与二维码

            本文由来源网络的知识点组合而成,感谢分享的作者,文章结尾处给出查询资料连接。

              条形码(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);//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 二维码或条码的存储

            在实际工作中,常常需要存储二维码或条码,这里提供一种存储方式,将二维码或条码转换成二进制字符串,并保存在数据库即可

              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 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(图片存储转换)

  • 相关阅读:
    leetcode 86. Partition List
    leetcode 303. Range Sum Query
    leetcode 1310. XOR Queries of a Subarray
    leetcode 1309. Decrypt String from Alphabet to Integer Mapping
    leetcode 215. Kth Largest Element in an Array
    将numpy.ndarray写入excel
    leetcode 1021 Remove Outermost Parentheses
    leetcode 1306. Jump Game III
    leetcode 1305. All Elements in Two Binary Search Trees
    ICCV2019 oral:Wavelet Domain Style Transfer for an Effective Perception-distortion Tradeoff in Single Image Super-Resolution
  • 原文地址:https://www.cnblogs.com/hhhh2010/p/4088236.html
Copyright © 2011-2022 走看看