常用小功能之生成带logo的二维码

客户那边因为只能搞到二维码,感觉有点单调。所以整理了一个简单的生成二维码小工具

不说废话,直接上源码

1.需要下载zxing.dll,引动到项目里面。
2.定义变量:

        public string link;//二维码链接
        public string img;//二维码logo图片

3.获取二维码地址:需要把地址通过前台传递过来

        /// <summary>
        /// 获取二维码链接地址
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnload_Click(object sender, EventArgs e)
        {
            if (txtInport.Text.Trim().Length == 0)
            {
                MessageBox.Show("请输入链接地址");
            }
            else 
            {
                link = txtInport.Text;
            }
        }

3.获取二维码logo图片:需要上传一张logo图片

        /// <summary>
        /// 获取图片地址
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnImg_Click(object sender, EventArgs e)
        {
            //弹窗
            OpenFileDialog ofd = new OpenFileDialog();
            //默认打开桌面
            ofd.InitialDirectory = @"C:\Users\Administrator\Desktop";
            //获取选择文件的信息
            if (ofd.ShowDialog()==DialogResult.OK)
            {
                txtImg.Text = ofd.FileName;
                img = txtImg.Text;
            }
        }

4.生成带logo的二维码:

        /// <summary>
        /// 生成带logo的二维码
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnCreat_Click(object sender, EventArgs e)
        {
            if (txtInport.Text.Trim().Length == 0 || txtImg.Text.Trim().Length == 0)
            {
                MessageBox.Show("请完善必填信息");
            }
            else 
            {
                //Logo 图片
                Bitmap logo = new Bitmap(img);
                //构造二维码写码器
                MultiFormatWriter writer = new MultiFormatWriter();
                Dictionary<EncodeHintType, object> hint = new Dictionary<EncodeHintType, object>();
                hint.Add(EncodeHintType.CHARACTER_SET, "UTF-8");
                hint.Add(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);

                //生成二维码 
                BitMatrix bm = writer.encode(link, BarcodeFormat.QR_CODE, 200, 200, hint);
                BarcodeWriter barcodeWriter = new BarcodeWriter();
                Bitmap map = barcodeWriter.Write(bm);


                //获取二维码实际尺寸(去掉二维码两边空白后的实际尺寸)
                int[] rectangle = bm.getEnclosingRectangle();

                //计算插入图片的大小和位置
                int middleW = Math.Min((int)(rectangle[2] / 4), logo.Width);
                int middleH = Math.Min((int)(rectangle[3] / 4), logo.Height);
                int middleL = (map.Width - middleW) / 2;
                int middleT = (map.Height - middleH) / 2;

                //将img转换成bmp格式,否则后面无法创建Graphics对象
                Bitmap bmpimg = new Bitmap(map.Width, map.Height, PixelFormat.Format32bppArgb);
                using (Graphics g = Graphics.FromImage(bmpimg))
                {
                    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;             
                    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                    g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
                    g.DrawImage(map, 0, 0);
                }
                //将二维码插入图片
                Graphics myGraphic = Graphics.FromImage(bmpimg);
                //白底
                myGraphic.FillRectangle(Brushes.White, middleL, middleT, middleW, middleH);
                myGraphic.DrawImage(logo, middleL, middleT, middleW, middleH);

                //显示二维码
                PicBox.Image = bmpimg;
            }
        }

5:另存带logo的二维码:

        /// <summary>
        /// 另存二维码
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnExport_Click(object sender, EventArgs e)
        {
            SaveImg.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif|PnG Image|*.png|Wmf  Image|*.wmf";
            SaveImg.FilterIndex = 0;
            if (PicBox.Image == null)
            {
                MessageBox.Show("没有预览图片");
            }
            else if (SaveImg.ShowDialog() == DialogResult.OK)
            {
                if (PicBox.Image != null)
                {
                    PicBox.Image.Save(SaveImg.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
                }
            }
        }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值