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

news2024/11/18 6:29:06

目录

关于 ThoughtWorks.QRCode

开发运行环境

方法设计

代码实现

调用示例

Logo图标透明化

小结


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

 生成结果如下图所示:

小结

生成二维码需要添加 ThoughtWorks.QRCode.dll 引用,下载链接资源如下:

https://download.csdn.net/download/michaelline/89207338

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

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

感谢您的阅读,希望本文能够对您有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1614871.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

虚拟局域网PPTP配置与验证

虚拟局域网PPTP配置与验证 前言PPTP服务侧安装配置REF 前言 虚拟专用网(Virtual Private Network,VPN)是一种通过公共网络建立安全的连接的技术。它能够在不同的地理位置之间建立私密的通信通道,实现远程访问网络资源的安全性和隐…

c语言不难说C语言难的,已经说明你根本不适合计算机编程工作

对普通人来说C语言是学习编程的最佳入门语言,有效培养你的编程思维,你有了这个基础后去学其它语言,你会惊讶地发现原来其它语言原来这么好学,现在出现一个Python说小白最适合,在开始前我有一些资料,是我根据…

真实世界的密码学(一)

原文:annas-archive.org/md5/655c944001312f47533514408a1a919a 译者:飞龙 协议:CC BY-NC-SA 4.0 前言 序言 当你拿起这本书时,你可能会想,为什么又一本关于密码学的书?甚至,为什么我要读这本…

STM32G030F6P6TR ST意法

STM32G030F6P6TR是ST(意法半导体)一款基于高性能ArmCortex-M032位RISC内核,工作频率高达64MHz的32位MCU微控制器。代理销售ST(意法半导体)全系列IC电子元器件-中芯巨能为您提供STM32G030F6P6TR(ST 32位MCU)引脚图及中文参数介绍等内容。 STM32G030F6P6TR的中文参数 …

UE5(基础动作)多人游戏制作蹲伏

1.创建输入操作,IA_Crouch 在输入映射中添加 IA_Crouch,在触发器中创建两个索引,已按下已松开来创建蹲伏输入。 蹲伏操作必须要勾选角色-角色移动-crouch勾选可蹲伏否则你的人物无法真正蹲下。 为蹲伏创建函数,创建布尔来判断是否蹲伏。 通过…

Linux 网络操作命令FTP

FTP命令 引言 文件传输协议(FTP)是一种用于在网络上进行文件传输的协议。在Linux系统中,FTP可以作为一个非常有用的工具来上传、下载和管理文件。本文将介绍如何在Linux系统中安装FTP服务器,以及如何使用FTP客户端进行文件传输。…

什么是XXE攻击?如何进行防护

安全性很难做到正确,即使在当今具有安全意识的世界中,也存在一些严重的漏洞,例如 XML 外部实体 (XXE),它们被忽视并最终成为破坏的原因。 XML 外部实体 (XXE) 攻击是一种计算机安全漏洞,通常存在于 Web 应用程序中&…

贪心 | | 将数组和减半的最少操作数

目录 将数组和减半的最少操作数 除 2 将数组和减半的最少操作数 2208. 将数组和减半的最少操作次数 - 力扣(LeetCode)https://leetcode.cn/problems/minimum-operations-to-halve-array-sum/description/ 由题意可知,我们可以遍历数组&…

高斯过程回归【详细数学推导】

机器学习笔记 第一章 机器学习简介 第二章 感知机 第三章 支持向量机 第四章 朴素贝叶斯分类器 第五章 Logistic回归 第六章 线性回归和岭回归 第七章 多层感知机与反向传播【Python实例】 第八章 主成分分析【PCA降维】 第九章 隐马尔可夫模型 第十章 奇异值分解 第十一章 熵…

[移动通讯]【无线感知-P1】[从菲涅尔区模型到CSI模型-3][Mobius transformations-3]

前言: 参考 Professor Bonfert-Taylors 《Mobius transformations》,我们重点理解 因此莫比乌斯变换是共形映射( conformal mappinngs )以及反演特性inversion 目录 mobious transfromation 定义 mobious transfromation 性质…

掌握item_get_app,提升电商推广转化率

一、引言 在数字化时代,电商行业蓬勃发展,竞争也日趋激烈。为了提高销售额和用户满意度,电商企业需要不断探索新的推广策略和技术手段。其中,掌握item_get_app技术,对于提升电商推广转化率具有重要意义。本文将深入探…

FreeRTOS之中断管理

1.中断简介: 2.中断优先级分组: 注意,中断优先级数值越低,其优先级越高。而在任务优先级数值越高,其优先级越大。 3.中断相关寄存器介绍: 4.系统中断优先级设置: FreeRTOS管理中断的两个函数&am…

屏幕太小?教你如何轻松将苹果电脑投射到安卓电视!

好几个人开组会,一台电脑怎么够看?那岂不是要好几颗脑袋挤在一起盯着屏幕?如果能将电脑屏幕投屏到大电视上,视觉就没有压力了。 将电脑屏幕投射到电视上,不仅能够让观众更加集中注意力,还能让信息的传递更加…

基于PyAutoGUI图片定位的自动化截图工具--完成了

1、计划 压测完成后需要编写性能测试报告,报告中所需数据截图较多,使用自动化操作方便快捷,就编写一个界面工具以便后续复用。 基于PyAutoGUI图片定位的自动化截图工具–jmeter部分 基于PyAutoGUI图片定位的自动化截图工具–jmeter部分&#…

Linux命令接着学习

which命令,找到各种命令程序所处在的位置 语法:which查找的命令 那么对于我们想查找其他类型文件所在的位置,我们可以用到find命令 find命令 选项为-name,表示按照文件名进行查找 find命令中通配符 find命令和前面rm命令一样&…

2024/4/21周报

文章目录 摘要Abstract文献阅读题目问题贡献方法卷积及池化层LSTM层CNN-LSTM模型 数据集参数设置评估指标实验结果 深度学习使用GRU和LSTM进行时间预测1.库的导入&数据集2.数据预处理3.模型定义4.训练过程5.模型训练 总结 摘要 本周阅读了一篇基于CNN-LSTM黄金价格时间序列…

数据结构与算法笔记:线性建堆

ACM大牛带你玩转算法与数据结构-课程资料 本笔记属于船说系列课程之一,课程链接: 哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep66799?csourceprivate_space_class_null&spm_id_from333.999.0.0 你也可以选择购买『船说系列课程-年度会…

IBM SPSS Statistics for Mac:强大的数据分析软件

IBM SPSS Statistics for Mac是一款功能强大的数据分析软件,专为Mac用户设计,提供了一系列专业的统计分析和数据管理功能。无论是科研人员、数据分析师还是学生,都能从中获得高效、准确的数据分析支持。 IBM SPSS Statistics for Mac v27.0.1…

Python与上位机开发day01

程序注释 程序注释主要是对代码进行解释说明,并不参与程序的运行 注释可以分为:单行注释和多行注释 1. 单行注释 单行注释以#开头,#后空一格后跟上注释的内容 # 这是单行注释 print(歪比巴卜)2. 多行注释 如果注释内容比较多的话,可以使用多行注释 多行注释以&…

电梯节能的推广意义

之前关于电梯能量回馈设备,小伍已经做了很多介绍,那么小伙伴们,他的推广意义你真的了解了么? 第一:节电降耗,电梯在运行过程中会产生大量的惯性能量,这些能量如果不被利用就会浪费。能量回馈技术…