二维码名片的制作

概念了解:vCard:它是一种用于定义电子名片的标准或这规范。常见的,我们的手机通讯录,可以到处为vCard格式。

 /// <summary>
    /// 名片数据类
    /// </summary>
     public class CardData
    {
        public string Name { get; set; }
        public string Post { get; set; }
        public string DepartMent { get; set; }
        public string ComPany { get; set; }
        public string MobilePhone { get; set; }
        public string TelePhone { get; set; }
        public string Address { get; set; }
        public string Email { get; set; }
        public string Url { get; set; }
    }

然后创建一个二维码生成类:


    /// <summary>
    /// 二维码生成类
    /// </summary>
     public class CreateQRCode
    {
        //根据名片数据生成特定格式的字符串
        private string GetCodeInfo(CardData cardData)
        {
            StringBuilder card = new StringBuilder();
            card.Append("BEGIN:VCARD");
            card.Append("\r\nFN:" + cardData.Name);
            card.Append("\r\nTITLE:" + cardData.Post );
            card.Append("\r\nORG:" + cardData.ComPany +";"+cardData .DepartMent );
            card.Append("\r\nTEL;CELL:" + cardData.MobilePhone );
            card.Append("\r\nTEL;WORK:" + cardData.TelePhone );
            card.Append("\r\nADR;WORK:" + cardData.Address);
            card.Append("\r\nURL:" + cardData.Url);
            card.Append("\r\nEMAIL:" + cardData.Email );
            card.Append("\r\nPHOTO;ENCODING=b;TYPE=JPEG:");
            card.Append("\r\nEND;VCARD\r\n:");
            return card.ToString();
        }
        /// <summary>
        /// 根据指定图片大小和名片信息生成二维码图片
        /// </summary>
        /// <param name="cardData">名片信息对象</param>
        /// <param name="imageWidth">图片显示宽度</param>
        /// <param name="imageHeight">图片显示的高度</param>
        /// <returns></returns>
        public Bitmap CreatCodeImage(CardData cardData,int imageWidth,int imageHeight)
        {
            //根据名片内容生成字符串
            string cardString = GetCodeInfo(cardData);

            //创建二维码需要的图片对象和绘图类对象
            Bitmap bmp = new Bitmap(imageWidth, imageHeight);
            Graphics graphics = Graphics.FromImage(bmp);
            graphics.FillRectangle(Brushes.White, 0, 0, bmp.Width, bmp.Height);//填上背景
            //创建二维码编码类对象
            QRCodeEncoder qRCodeEncoder = new QRCodeEncoder();
            qRCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//设置编码方式
            qRCodeEncoder.QRCodeScale = 3;//设置二维码图片大小
            qRCodeEncoder.QRCodeVersion = 0;//设置版本
            //设置错误校验级别
            qRCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
            //按照编码格式将名片信息编码成图片文件
            Image image = qRCodeEncoder.Encode(cardString, Encoding.GetEncoding("utf-8"));
            //画出二维码图片
            int x = (imageWidth - image.Width) / 2;
            int y = (imageHeight - image.Height) / 2;
            graphics.DrawImage(image, new Point(x, y));//使用Griphics对象在背景画出二维码图片
            //画出logo图片,并添加到二维码上面
            image = Properties.Resources.Bug;//通过资源文件获取图片
             x = (imageWidth - image.Width) / 2;
             y = (imageHeight - image.Height) / 2;
            graphics.DrawImage(image, new Point(x, y));
            return bmp;

        }
    }

测试方法:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private CreateQRCode createQRCode = new CreateQRCode();
        private void btnCreate_Click(object sender, EventArgs e)
        {
            //封装数据
            CardData data = new CardData
            {
                Name = this.tbName.Text.Trim(),
                Post = this.tbPost.Text.Trim(),
                DepartMent = this.tbDepartment.Text.Trim(),
                ComPany = this.tbCompany.Text.Trim(),
                MobilePhone = this.tbMobilePhone.Text.Trim(),
                TelePhone = this.tbTelePhone.Text.Trim(),
                Address = this.tbAddress.Text.Trim(),
                Url = this.tbUrl.Text.Trim(),
                Email = this.tbEmail.Text.Trim()

            };
            //调用二维码生成类的方法生成图片
            this.pbCode.Image = createQRCode.CreatCodeImage(data, this.pbCode.Width, this.pbCode.Height);
        }
    }

猜你喜欢

转载自blog.csdn.net/qq_37589387/article/details/88603985