简介:
本案例适用在市场部同事做推广营销时推送个人专属链接,绑定自身专属客户,引导客户了解产品等各方面业务的一种引导模式。
框架环境介绍:
- 控制台应用程序
- .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.最终效果: