C#编程之C#条形码与二维码
小标 2019-01-15 来源 : 阅读 2151 评论 0

摘要:本文主要向大家介绍了C#编程之C#条形码与二维码,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。

本文主要向大家介绍了C#编程之C#条形码与二维码,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。

        本文由来源网络的知识点组合而成,感谢分享的作者,文章结尾处给出查询资料连接。
          条形码(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方法
     

        /// 

在二维码位图上绘制标志。


        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();
        }

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C#.NET频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 1
看完这篇文章有何感觉?已经有2人表态,50%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程