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

 更新时间:2024年03月11日 10:13:13   作者:LighT.InEyE  
这篇文章主要为大家详细介绍了C#如何使用QRCode生成海报图并嵌入定位带logo的二维码,文中的示例代码讲解详细,需要的小伙伴可以参考下

简介

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

框架环境介绍

  • 控制台应用程序
  • .NET  Framework    v4.5.2
  • 组件   QRCoder 
  • vs2019

创建项目

使用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生成海报图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#控制台程序如何发布到服务器Linux上运行

    C#控制台程序如何发布到服务器Linux上运行

    这篇文章主要给大家介绍了关于C#控制台程序如何发布到服务器Linux上运行的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-11-11
  • C# Onnx实现DIS高精度图像二类分割

    C# Onnx实现DIS高精度图像二类分割

    这篇文章主要为大家详细介绍了C# Onnx实现DIS高精度图像二类分割的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • sqlserver备份还原数据库功能封装分享

    sqlserver备份还原数据库功能封装分享

    这篇文章主要介绍了sqlserver备份还原数据库功能封装示例,需要的朋友可以参考下
    2014-03-03
  • WPF基于物理像素绘制图形

    WPF基于物理像素绘制图形

    这篇文章介绍了WPF基于物理像素绘制图形的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • C#实现快速比较Word文档并显示差异

    C#实现快速比较Word文档并显示差异

    本文将详细介绍如何在 C# 中比较 Word 文档,包括基础对比、使用自定义选项忽略格式或特定元素,以及如何控制对比的精度,无论是对小型文档还是复杂文档,这些方法都能帮助你快速识别文档差异
    2026-04-04
  • 详解C# wpf如何嵌入外部程序

    详解C# wpf如何嵌入外部程序

    实现嵌入各种窗口控件后,其实还会有一种需求:嵌入外部程序,我们有时可能需要嵌入一个浏览器或者或者播放器等一些已有的程序,下面我们就来看看具体操作吧
    2024-04-04
  • DataGridView自定义单元格表示值、Error图标显示的方法介绍

    DataGridView自定义单元格表示值、Error图标显示的方法介绍

    这篇文章介绍了DataGridView自定义单元格表示值、Error图标显示的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-02-02
  • C#将List转换为只读的List方法与技巧

    C#将List转换为只读的List方法与技巧

    在 C# 编程的广阔世界里,数据的安全性与稳定性始终是我们关注的焦点,当涉及到集合数据的处理时,有时我们会面临这样一个关键需求:将List转换为只读的List,所以本文给大家介绍了使用C#将List转换为只读的List的方法与技巧,需要的朋友可以参考下
    2025-01-01
  • WPF利用TextBlock实现查找结果高亮显示效果

    WPF利用TextBlock实现查找结果高亮显示效果

    在应用开发过程中,经常遇到这样的需求:通过关键字查找数据,把带有关键字的数据显示出来,同时在结果中高亮显示关键字,所以本文就来和大家介绍一下如何利用TextBlock实现查找结果高亮显示效果吧
    2023-08-08
  • 一文教你如何使用C#开发一个Windows后台服务

    一文教你如何使用C#开发一个Windows后台服务

    这篇文章主要为大家详细介绍了如何基于C#实现Windows服务的创建、安装、启动、停止和卸载,并展示具体的代码示例和操作步骤,需要的小伙伴可以了解下
    2025-08-08

最新评论