c#,.net使用QRCoder生成海报图,嵌入定位带logo的二维码

本文介绍了如何通过.NETFrameworkv4.5.2和QRCoder库在控制台应用中创建个性化的推广二维码,包括生成带有logo的二维码、定位到海报模板并绑定员工ID,最后实现二维码图片的合成与存储。
摘要由CSDN通过智能技术生成
简介:

本案例适用在市场部同事做推广营销时推送个人专属链接,绑定自身专属客户,引导客户了解产品等各方面业务的一种引导模式。

框架环境介绍:
  • 控制台应用程序
  • .NET  Framework    v4.5.2
  • 组件   QRCoder 
  • vs2019
1.源码下载: 
    .net使用QRCoder生成海报图,嵌入定位带logo的二维码
2.创建项目:

   使用vs创建控制台应用程序,框架版本可以根据自己实际情况选择,

 3.引用与其框架对应不冲突版本组件QRCoder

    右键项目 吊起NuGet引用资源窗口,在浏览处搜索QRCoder插件

  

4.准备业务场景所需要的东西 

在项目\bin\Debug下新建四个文件夹,dingwei  海报图模板  ,logo 二维码logo,new  生成的海报,

user 生成的二维码logo临时存储区

5.业务代码: 
using QRCoder;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace QRCoder_img
{
    class Program
    {
        static void Main(string[] args)
        {
           
                //业务场景:本次是通过一个表单带上市场部员工id
                //生成二维码,并定位到海报模板上,随后绑定到该
                //员工,此刻该员工就拥有自己的推广二维码
                //假设 员工id ,真实业务场景应从库中抓取未生成二维码的员工id,定时作业执行。
                var id = 1;
                // 要生成的二维码链接
                var url="http://baidu.com?id="+id;
                //生成的二维码路径
                string ewm = "";
                //生成二维码,并返回路径
                RenderQrCode(url, id, ref ewm);
                //定位生成新的图
                Image img = Image.FromFile(ewm);
                Image imgBack = Image.FromFile(System.IO.Directory.GetCurrentDirectory() + "/dingwei/1.png");
                Bitmap bmp = CombinImage(270, 270, imgBack, img, 227, 668);
            //最终生成图的路径,可在此之后同步数据库,或者其他不同形式业务
                string str = System.IO.Directory.GetCurrentDirectory() + "/new/1tg1.png";
                if (System.IO.File.Exists(str))
                    System.IO.File.Delete(str);
                bmp.Save(str, ImageFormat.Png);
                bmp.Clone();
                bmp.Dispose();
                img.Dispose();
                System.IO.File.Delete(ewm);
            

        }

        /// <summary>
        /// 生成带有logo的二维码
        /// </summary>
        /// <param name="url">二维码链接</param>
        /// <param name="id">市场部用户id,也作为生成图的名字标识</param>
        /// <param name="ewm">生成图的路径</param>
        public static void RenderQrCode(string url, int id, ref string ewm)
        {
            string level = "L";
            QRCodeGenerator.ECCLevel eccLevel = (QRCodeGenerator.ECCLevel)(level == "L" ? 0 : level == "M" ? 1 : level == "Q" ? 2 : 3);
            QRCodeGenerator qrGenerator = new QRCodeGenerator();
            QRCodeData qrCodeData = qrGenerator.CreateQrCode(url, eccLevel);
            QRCode qrCode = new QRCode(qrCodeData);
            var imageewm = qrCode.GetGraphic(20, Color.Black, Color.White,
            GetIconBitmap(System.IO.Directory.GetCurrentDirectory() + "/logo/appicon.png"));
            string str = System.IO.Directory.GetCurrentDirectory() + "/user/user" + id + ".jpg";
            if (System.IO.File.Exists(str))
                System.IO.File.Delete(str);
            imageewm.Save(str, ImageFormat.Jpeg);
            imageewm.Clone();
            imageewm.Dispose();
            qrCode.Dispose();
            qrCodeData.Dispose();
            ewm = str;
        }

        public static Bitmap GetIconBitmap(string url)
        {
            Bitmap img = null;
            if (url.Length > 0)
            {
                try
                {
                    img = new Bitmap(url);
                }
                catch (Exception)
                {
                }
            }
            return img;
        }
        /// <summary>
        /// 两张图合并
        /// </summary>
        /// <param name="width">二维码绘画大小</param>
        /// <param name="height">二维码绘画大小</param>
        /// <param name="imgBack">模板图</param>
        /// <param name="img">二维码图</param>
        /// <param name="xDeviation">定位x</param>
        /// <param name="yDeviation">定位Y</param>
        /// <returns></returns>
        public static Bitmap CombinImage(int width, int height, Image imgBack, Image img, int xDeviation = 0, int yDeviation = 0)
        {
            Bitmap bmp = new Bitmap(imgBack.Width, imgBack.Height);
            Graphics g = Graphics.FromImage(bmp);
            g.Clear(Color.White);
            g.DrawImage(imgBack, 0, 0, imgBack.Width, imgBack.Height);
            g.DrawImage(img, xDeviation, yDeviation, width, height);
            GC.Collect();
            g.Dispose();
            return bmp;
        }
      
    }
}
6.最终效果: 

 

7. 下载源码 
  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值