C#使用ThoughtWorks.QRCode生成二维码

 更新时间:2024年04月23日 08:38:06   作者:初九之潜龙勿用  
ThoughtWorks.QRCode是一款功能强劲的动态链接库,能够为.net应用生成二维码,这篇文章主要为大家详细介绍了C#使用ThoughtWorks.QRCode生成二维码的具体方法,需要的可以参考下

关于 ThoughtWorks.QRCode

二维码是用某种特定的几何图形按一定规律在平面分布的、黑白相间的、记录数据符号信息的图形,在应用程序开发中也被广泛使用,诸如信息获取(如关注微信公众号)、网站跳转(写入Url)、防伪查询(反馈查询结果)、手机支付(如微信支付、支付宝支付)、会员登录(扫码登录方式)等等。

ThoughtWorks.QRCode是一款功能强劲的动态链接库,能够为.net应用生成二维码,QR 全称为 Quick Response,是一种编码方式。

开发运行环境

操作系统: Windows Server 2019 DataCenter

.net版本: .netFramework4.0 或以上

开发工具:VS2019  C#

方法设计

public bool CreateQrCode 方法(创建二维码)调用参数见如下表格:

序号参数名类型说明
1Contentstring要写入的内容,如Url链接地址等
2ImagePathstring要生成的目标二维码图片物理文件路径
3QRCodeScaleint二维码像素大小,值越大生成的二维码图片像素越高尺寸越大
4backgroundColorSystem.Drawing.Color二维码的背景颜色,建议设置为白色
5foreColorSystem.Drawing.Color二维码的前景颜色,建议设置为黑色
6logoImage=""string可选择是否在二维码图片中间添加Logo小图标,默认值为“”字符串,即表示不设置,如果设置则填入图标物理文件路径,方法会判断该文件是否存在,存在则尝试添加

本方法返回 bool 值 ,表示填入参数 ImagePath 的文件是否存在,为True则表示成功,程序可以后续继续处理其它业务。

代码实现

public bool CreateQrCode(string Content, string ImagePath, int QRCodeScale, System.Drawing.Color backgroundColor,System.Drawing.Color foreColor,string logoImage="")
             {
 
                 ThoughtWorks.QRCode.Codec.QRCodeEncoder encoder = new ThoughtWorks.QRCode.Codec.QRCodeEncoder();
                 encoder.QRCodeEncodeMode = ThoughtWorks.QRCode.Codec.QRCodeEncoder.ENCODE_MODE.BYTE;//编码方式(注意:BYTE能支持中文,ALPHA_NUMERIC扫描出来的都是数字)
                 encoder.QRCodeScale = QRCodeScale;//大小(值越大生成的二维码图片像素越高)
                 encoder.QRCodeVersion = 0;//版本(注意:设置为0主要是防止编码的字符串太长时发生错误)
                 encoder.QRCodeErrorCorrect = ThoughtWorks.QRCode.Codec.QRCodeEncoder.ERROR_CORRECTION.M;//错误效验、错误更正(有4个等级)
                 encoder.QRCodeBackgroundColor = backgroundColor;
                 encoder.QRCodeForegroundColor = foreColor;
 
                 System.Drawing.Bitmap bcodeBitmap = encoder.Encode(Content,Encoding.UTF8);
                 //FileStream fs = new FileStream(ImagePath, FileMode.OpenOrCreate);
                 bcodeBitmap.Save(ImagePath,System.Drawing.Imaging.ImageFormat.Jpeg);
                if (logoImage != "")
                {
                        System.Drawing.Bitmap btm = new System.Drawing.Bitmap(logoImage);
                    System.Drawing.Bitmap copyImage = new System.Drawing.Bitmap(btm,bcodeBitmap.Width / 4,bcodeBitmap.Height / 4);
                    System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bcodeBitmap);
                        int x = bcodeBitmap.Width / 2 - copyImage.Width / 2;
                        int y = bcodeBitmap.Height / 2 - copyImage.Height / 2;
                        g.DrawImage(copyImage, x, y);
                    bcodeBitmap.Save(ImagePath, System.Drawing.Imaging.ImageFormat.Jpeg);
                    //                    CombinImage(bcodeBitmap, "").Save(ImagePath);
                }
 
                IntPtr ip = bcodeBitmap.GetHbitmap();
                 bcodeBitmap.Dispose();
                 //fs.Close();
                 //fs.Dispose();
                 DeleteObject(ip);
                 GC.Collect();
//                 File.Delete(ImagePath);
                 return File.Exists(ImagePath);
             }

调用示例

假设服务器有 d:\logo.jpg 做为二维码附加图标,最终组合生成到 d:\1.jpg。前端页面放置 Image控件 image1,则示例代码如下:

bool ss=CreateQrCode("https://www.baidu.com", "d:\\1.jpg", 20, System.Drawing.Color.White, System.Drawing.Color.Black, "d:\\logo.jpg");
if (ss == true)
{
    string result_base64 = ImgToBase64String("d:\\1.jpg", true);
    image1.ImageUrl = result_base64;
    return;   
}

生成结果如下图所示:

Logo图标透明化

可以将Logo图标透明化,增加一点乐趣。public void ImageToPNG 方法参数调用说明如下:

序号参数名类型说明
1sourceFilenamestring源图片文件物理路径
2pngFilenamestring要生成的png文件物理路径
3backcolorSystem.Drawing.Color要变透明而要去除的主背景色

实现代码如下:

public void ImageToPNG(string sourceFilename,string pngFilename,System.Drawing.Color backcolor)
{
 
     System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(sourceFilename);
     bmp.MakeTransparent(System.Drawing.Color.FromArgb(0, backcolor));
     bmp.Save(pngFilename,System.Drawing.Imaging.ImageFormat.Png);
}

调用示例:

ImageToPNG("d:\\logo.jpg", "d:\\logo.png", System.Drawing.Color.White);
bool ss=mb.CreateQrCode("https://www.baidu.com", "d:\\1.jpg", 20, System.Drawing.Color.White, System.Drawing.Color.Black, "d:\\logo.png");
if (ss == true)
{
    string result_base64 = mb.ImgToBase64String("d:\\1.jpg", true);
    image1.ImageUrl = result_base64;
    return;   
}

生成结果如下图所示:

实现方法可以根据我们的实际开发需要进一步进行修改,如二维码图片的大小、Logo的大小、质量等。

如何获取图像 base64 数据的方法请参照我的文章:《C# 自动填充文字内容到指定图片》

以上就是C#使用ThoughtWorks.QRCode生成二维码的详细内容,更多关于C# ThoughtWorks.QRCode生成二维码的资料请关注脚本之家其它相关文章!

相关文章

  • Unity UGUI的CanvasScaler画布缩放器组件介绍使用

    Unity UGUI的CanvasScaler画布缩放器组件介绍使用

    这篇文章主要为大家介绍了Unity UGUI的CanvasScaler画布缩放器组件介绍使用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • C#图表算法之无向图

    C#图表算法之无向图

    这篇文章介绍了C#图表算法之无向图,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • C#异步任务延续的三种底原理解析(最新推荐)

    C#异步任务延续的三种底原理解析(最新推荐)

    这篇文章主要介绍了C#异步 任务延续的三种底层玩法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-05-05
  • C#利用Spire.Doc for .NET库将Word文档转换为EMF格式

    C#利用Spire.Doc for .NET库将Word文档转换为EMF格式

    在日常工作中,Word 文档成为我们处理文本和排版信息不可或缺的工具,然而,当我们需要将 Word 文档的内容集成到其他应用,可能会带来一些局限性,本文将深入探讨如何在 C# 中利用 Spire.Doc for .NET 库,高效且高质量地将 Word 文档转换为 EMF 格式
    2025-12-12
  • C#多接口实现、重名成员、显式实现、接口继承+抽象类和接口区别说明

    C#多接口实现、重名成员、显式实现、接口继承+抽象类和接口区别说明

    这段SEO描述融合了“接口显式实现”、“接口冲突”、“接口继承”三个核心关键词,详细概括了文章关于Java接口相关知识点的讲解,包括显式实现规则、冲突接口处理方法、接口继承规则等内容,适合准备相关考试或项目开发的读者
    2026-06-06
  • Unity3D应用之时钟与钟表小组件的使用教程

    Unity3D应用之时钟与钟表小组件的使用教程

    这篇文章主要来和大家详细介绍一下Unity3D应用开发中的时钟和钟表小组件的使用,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-01-01
  • C#中字符串分割的多种方式

    C#中字符串分割的多种方式

    在C#编程语言中,字符串处理是日常开发中不可或缺的一部分,字符串分割是处理文本数据时常用的操作,它允许我们将一个长字符串分解成多个子字符串,本文给大家介绍了C#中字符串分割的多种方式,需要的朋友可以参考下
    2025-01-01
  • C#中csv文件与DataTable互相导入处理实例解析

    C#中csv文件与DataTable互相导入处理实例解析

    这篇文章主要介绍了C#中csv文件与DataTable互相导入处理实例解析,非常实用的功能,需要的朋友可以参考下
    2014-08-08
  • C# VB.NET 将Html转为Excel

    C# VB.NET 将Html转为Excel

    本文介绍通过C#和VB.NET代码展示将Html转为Excel文档的方法。文中的示例代码讲解详细,对我们学习C#有一定帮助,感兴趣的小伙伴可以了解一下
    2022-03-03
  • C#编程调用Cards.dll实现图形化发牌功能示例

    C#编程调用Cards.dll实现图形化发牌功能示例

    这篇文章主要介绍了C#编程调用Cards.dll实现图形化发牌功能,结合实例形式分析了C#动态链接库调用及图形操作技巧,需要的朋友可以参考下
    2017-06-06

最新评论