zoukankan      html  css  js  c++  java
  • c#生成一维码,二维码。文字,可以设置尺寸大小,以及显示位置

    对一维码。以及二维码生成进行配置生成,并且可以实现添加文字内容实现x,y轴定位坐标位置

    1.以下方法是生成一维码,二维码,文字的通用方法

            /// <summary>
            /// 添加字体方法  
            /// </summary>
            /// <param name="g">Graphics g  ,目标Graphics对象 </param>
            /// <param name="drawPoint">PointF drawPoint,存储坐标位置</param>
            /// <param name="data">string data  ,准备添加的字符串</param>
            /// <param name="size">大小</param>
            private void AddFont(Graphics g, PointF drawPoint, string data, int size)
            {
                SolidBrush mybrush = new SolidBrush(Color.Black);  //设置默认画刷颜色
                Font myfont = new Font("宋体", size, FontStyle.Regular);     //设置默认字体格式   
                g.DrawString(data, myfont, mybrush, drawPoint); //图片上添加文字
                //刷新pictureBox调用此方法:pictureBox1.Refresh();
            }
    
            /// <summary>
            /// 生成二维码  引用:using ThoughtWorks.QRCode.Codec;
            /// </summary>
            /// <param name="g">Graphics g  ,目标Graphics对象 </param>
            /// <param name="drawPoint">PointF drawPoint,存储坐标位置</param>
            /// <param name="data">string data  ,准备添加的字符串</param>
            /// <param name="width">二维码宽度</param>
            /// <param name="height">二维码高度</param>
            private void CreateQRCode(Graphics g, PointF drawPoint, string data, int width, int height)
            {
                QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
                qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
                qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
                qrCodeEncoder.QRCodeScale = 3; //作为初始定义,没有实际意义
                qrCodeEncoder.QRCodeVersion = 7; //二维码生成的类型//Encoding.UTF8为必备参数,否则某些中文字符无法识别
                System.Drawing.Image image = qrCodeEncoder.Encode(data, Encoding.UTF8);
    
                #region 根据设定的目标图片尺寸调整二维码QRCodeScale设置
                if (width > 0)
                {
                    //当设定目标图片尺寸大于生成的尺寸时,逐步增大方格尺寸
                    #region 当设定目标图片尺寸大于生成的尺寸时,逐步增大方格尺寸
                    while (image.Width < width)
                    {
                        qrCodeEncoder.QRCodeScale++;
                        System.Drawing.Image imageNew = qrCodeEncoder.Encode(data, Encoding.UTF8);
                        if (imageNew.Width < width)
                        {
                            image = new System.Drawing.Bitmap(imageNew);
                            imageNew.Dispose();
                            imageNew = null;
                        }
                        else
                        {
                            qrCodeEncoder.QRCodeScale--; //新尺寸未采用,恢复最终使用的尺寸
                            imageNew.Dispose();
                            imageNew = null;
                            break;
                        }
                    }
                    #endregion
    
                    //当设定目标图片尺寸小于生成的尺寸时,逐步减小方格尺寸
                    #region 当设定目标图片尺寸小于生成的尺寸时,逐步减小方格尺寸
                    while (image.Width > width && qrCodeEncoder.QRCodeScale > 1)
                    {
                        qrCodeEncoder.QRCodeScale--;
                        System.Drawing.Image imageNew = qrCodeEncoder.Encode(data, Encoding.UTF8);
                        image = new System.Drawing.Bitmap(imageNew);
                        imageNew.Dispose();
                        imageNew = null;
                        if (image.Width < width)
                        {
                            break;
                        }
                    }
                    #endregion
                }
                #endregion
                g.DrawImage(image, drawPoint);
            }
    
    
            /// <summary>
            /// 生成一维码 引用:using BarcodeLib
            /// </summary>
            /// <param name="g">Graphics g  ,目标Graphics对象 </param>
            /// <param name="drawPoint">PointF drawPoint,存储坐标位置</param>
            /// <param name="data">string data  ,准备添加的字符串</param>
            /// <param name="width">二维码宽度</param>
            /// <param name="height">二维码高度</param>
            private void CreateBrCode(Graphics g, PointF drawPoint, string data, int width, int height)
            {
                var barcode = new Barcode();
                barcode.IncludeLabel = false; //是否显示下方数字
                barcode.Alignment = AlignmentPositions.CENTER;  //居中显示
                barcode.Width = width;   //宽度
                barcode.Height = height; //高度
                barcode.RotateFlipType = RotateFlipType.RotateNoneFlipNone;//无旋转
                barcode.BackColor = Color.White; //背景颜色
                barcode.ForeColor = Color.Black; //条形码颜色
                Image barcodeImg = barcode.Encode(TYPE.CODE128B, data);  //将字符进行转化Image
                g.DrawImage(barcodeImg, drawPoint);
            }

    2.在这里通过winform的按钮事件去调用,也可以根据实际操作去调用

            /// <summary>
            /// 生成按钮
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button2_Click(object sender, EventArgs e)
            {
                if (string.IsNullOrWhiteSpace(txt_QrCode.Text) && string.IsNullOrWhiteSpace(txt_Font1_Content.Text) && string.IsNullOrWhiteSpace(txt_Font2_Content.Text) && string.IsNullOrWhiteSpace(txt_Font3_Content.Text))
                {
                    MessageBox.Show("条码内容以及文字内容必须填写一项");
                    return;
                }
                if (!string.IsNullOrWhiteSpace(txt_QrCode.Text))
                {
                    if (string.IsNullOrWhiteSpace(txt_QrCodeX.Text) || string.IsNullOrWhiteSpace(txt_QrCodeY.Text) || string.IsNullOrWhiteSpace(txt_QrCodeWidth.Text) || string.IsNullOrWhiteSpace(txt_QrCodeHeight.Text))
                    {
                        MessageBox.Show("条码内容不为空,请填写完整的条码信息内容");
                        return;
                    }
                    if (radioButton2.Checked)
                    {
                        if (txt_QrCodeWidth.Text != txt_QrCodeHeight.Text)
                        {
                            MessageBox.Show("二维码的宽度,高度应该保持一致");
                            return;
                        }
                    }
                }
                if (!string.IsNullOrWhiteSpace(txt_Font1_Content.Text))
                {
                    if (string.IsNullOrWhiteSpace(txt_Font1_X.Text) || string.IsNullOrWhiteSpace(txt_Font1_Y.Text) || string.IsNullOrWhiteSpace(txt_Font1_Size.Text))
                    {
                        MessageBox.Show("文字1内容不为空,请填写完整的文字1信息内容");
                        return;
                    }
                }
                if (!string.IsNullOrWhiteSpace(txt_Font2_Content.Text))
                {
                    if (string.IsNullOrWhiteSpace(txt_Font2_X.Text) || string.IsNullOrWhiteSpace(txt_Font2_Y.Text) || string.IsNullOrWhiteSpace(txt_Font2_Size.Text))
                    {
                        MessageBox.Show("文字2内容不为空,请填写完整的文字2信息内容");
                        return;
                    }
                }
                if (!string.IsNullOrWhiteSpace(txt_Font3_Content.Text))
                {
                    if (string.IsNullOrWhiteSpace(txt_Font3_X.Text) || string.IsNullOrWhiteSpace(txt_Font3_Y.Text) || string.IsNullOrWhiteSpace(txt_Font3_Size.Text))
                    {
                        MessageBox.Show("文字3内容不为空,请填写完整的文字3信息内容");
                        return;
                    }
                }
                Bitmap bitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);
                //创建 Graphics 对象,将pictureBox1作为背景图像进行内容的背景图像
                Graphics graphics = Graphics.FromImage(bitmap);
    
                ////添加一个白色画布
                //Rectangle Rec = new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height);
                //SolidBrush mySolidBrush = new SolidBrush(Color.White);
                //graphics.FillRectangle(mySolidBrush, Rec);
    
                //当条码内容部分数据不为空,界面显示条码
                if (!string.IsNullOrWhiteSpace(txt_QrCode.Text))
                {
                    PointF DrawPoint = new PointF(Convert.ToInt32(txt_QrCodeX.Text), Convert.ToInt32(txt_QrCodeY.Text));
                    //判断是否是一维码或者是二维码
                    if (radioButton2.Checked)
                        CreateQRCode(graphics, DrawPoint, txt_QrCode.Text, Convert.ToInt32(txt_QrCodeWidth.Text), Convert.ToInt32(txt_QrCodeHeight.Text));
                    else if (radioButton1.Checked)
                        CreateBrCode(graphics, DrawPoint, txt_QrCode.Text, Convert.ToInt32(txt_QrCodeWidth.Text), Convert.ToInt32(txt_QrCodeHeight.Text));
                }
                //当文字1内容部分数据不为空,界面显示内容1的数据
                if (!string.IsNullOrWhiteSpace(txt_Font1_Content.Text))
                {
                    //创建 PointF 有序列类存储 float x,float y的数据(内容的坐标轴位置)
                    PointF DrawPoint = new PointF(Convert.ToInt32(txt_Font1_X.Text), Convert.ToInt32(txt_Font1_Y.Text));
                    AddFont(graphics, DrawPoint, txt_Font1_Content.Text, Convert.ToInt32(txt_Font1_Size.Text));
                }
                //当文字2内容部分数据不为空,界面显示内容1的数据
                if (!string.IsNullOrWhiteSpace(txt_Font2_Content.Text))
                {
                    PointF DrawPoint = new PointF(Convert.ToInt32(txt_Font2_X.Text), Convert.ToInt32(txt_Font2_Y.Text));
                    AddFont(graphics, DrawPoint, txt_Font2_Content.Text, Convert.ToInt32(txt_Font2_Size.Text));
                }
                //当文字3内容部分数据不为空,界面显示内容1的数据
                if (!string.IsNullOrWhiteSpace(txt_Font3_Content.Text))
                {
                    PointF DrawPoint = new PointF(Convert.ToInt32(txt_Font3_X.Text), Convert.ToInt32(txt_Font3_Y.Text));
                    AddFont(graphics, DrawPoint, txt_Font3_Content.Text, Convert.ToInt32(txt_Font3_Size.Text));
                }
    
    
                //刷新pictureBox1
                pictureBox1.Image = bitmap;
            }

    3.在这里通过winform的按钮事件去清空界面,通过遍历窗体的内部控件元素,进行删除

            /// <summary>
            /// 清空姐界面内容
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button1_Click(object sender, EventArgs e)
            {
                //遍历整个窗体的元素
                foreach (Control item in this.Controls)
                {
                    //如果是文本框
                    if (item is TextBox)
                    {
                        item.Text = null;
                    }
                    if (item is PictureBox)
                    {
                        //方法一:
                        ((PictureBox)item).Image = null;
    
                        ////方法二:
                        ////清空picture内容
                        //Bitmap bitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);
                        //Graphics graphics = Graphics.FromImage(bitmap);
                        ////添加一个透明画布
                        //Rectangle Rec = new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height);
                        //SolidBrush mySolidBrush = new SolidBrush(Color.Transparent);
                        //graphics.FillRectangle(mySolidBrush, Rec);
                        //((PictureBox)item).Image = bitmap;
                    }
                }
            }

    最后呈现结果

  • 相关阅读:
    50个好用的前端框架,千万收好以留备用!
    嫦娥五号顺利升空,NASA、欧洲航天局回应
    【电脑故障排查】第1章 BIOS和主板故障
    我的老博客——我在chinaunix的家
    Linux操作系统(第二版)(RHEL 8/CentOS 8)
    Java Web整合开发(21) -- 宏观把握Hibernate
    3 远程仓库
    PHP设计模式-策略模式 转
    ubuntu server设置时区和更新时间
    ubuntu 重启 nginx 失败,* Restarting nginx nginx ...fail!
  • 原文地址:https://www.cnblogs.com/wangshunyun/p/13813017.html
Copyright © 2011-2022 走看看