C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C# QRCode生成海报图

C#使用QRCode生成海报图并嵌入定位带logo的二维码

作者:LighT.InEyE

这篇文章主要为大家详细介绍了C#如何使用QRCode生成海报图并嵌入定位带logo的二维码,文中的示例代码讲解详细,需要的小伙伴可以参考下

简介

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

框架环境介绍

创建项目

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

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

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

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

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

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

业务代码

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

最终效果 

到此这篇关于C#使用QRCode生成海报图并嵌入定位带logo的二维码的文章就介绍到这了,更多相关C# QRCode生成海报图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文