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

  • 相关阅读:
    爱的感悟
    连点成图:享受创建图形的乐趣
    python实现动态更新远程机器列表的SSH登录脚本
    python生成数据库中所有表的DESC描述
    生活之美
    克服“测试怠惰”的习惯
    使用git和github托管个人项目
    连点成线
    一次合并数据库的经历
    python使用装饰器捕获异常
  • 原文地址:https://www.cnblogs.com/hhhh2010/p/4088236.html
Copyright © 2020-2023  润新知