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

目录

关于 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.mzph.cn/web/1718.shtml

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

相关文章

vue+node使用RSA非对称加密,实现登录接口加密密码

背景 登录接口,密码这种重要信息不可以用明文传输,必须加密处理。 这里就可以使用RSA非对称加密,后端生成公钥和私钥。 公钥:给前端,公钥可以暴露出来,没有影响,因为公钥加密的数据只有私钥才…

不同分辨率下搜狗输入法输入图标过大

现象 笔记本是2k屏外接1080p显示器,分辨率不同导致搜狗输入法在笔记本显示器上显示正常,而在1080p显示器下图标很大过大,一打字就显得很尴尬。 解决 找到以上三个可执行文件,分别右键打开属性-->兼容性-->更改高DPI设置 按…

安装nvm管理node版本

准备工作 卸载电脑上原有的nodejs,卸载后确保相关的文件夹也删除掉,否则会在nvm安装成功后管理node版本时造成冲突,例如执行nvm use 20.5.0时报exit status 145的错误。原本就没有安装过node的不用管 一、nvm的安装及使用 1、下载nvm&…

二叉树的遍历(递归与非递归)

二叉树结构: public static class TreeNode{public int val;public TreeNode left;public TreeNode right;public TreeNode(int val) {this.val val;}}先序递归遍历: public static void preOrder(TreeNode root){if (root null){return;}System.out…

mysql 删除数据的四种方法

在MySQL数据库中,删除数据是一个常见的操作,它允许从表中移除不再需要的数据,本文就来介绍一下四种方法,具有一定的参考价值,感兴趣的可以了解一下 − 目录 写在前面 方法介绍1. DELETE语句 示例: 2. DROP TABLE语句: 3. TRUNCATE TABLE 示例&#x…

SS-Net复现

表1 8 labeled 样本复现结果–Dice:88.540501,Jaccard:79.60452,95HD:7.58588897,误差在可接受范围内 表2 7 labeled 样本复现结果–Dice:86.778431,Jaccard:77.665895&…

Vim是一款功能强大的文本编辑器

简介: Vim是一款功能强大的文本编辑器,广泛用于Linux系统。以下是Vim编辑器的基本使用方法: 打开文件: 使用vim命令加上要编辑的文件名,例如:vim filename。 进入编辑模式: 在Vim中&#xff0c…

算法思想总结:栈

一、栈的经典应用:波兰表达式与逆波兰表达式 我们平时看到的 12*(3-4*5)6/7 叫做中缀表达式,平时我们习惯用这个计算的原因是我们可以整体地去看到这个表达式并且清楚地知道各个运算符的优先级,但是计算机并不一定知道…

微信小程序四(全局配置和页面配置页面跳转)

全局配置: 小程序根目录下的 app.json 文件用来对微信小程序进行全局配置,决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等 tabBar设置:最少两个最多5个 "tabBar": {"list":[{"pagePath": &qu…

“饕餮之路:贪吃蛇编程精粹“

目录 前言 1.写代码前的预准备 1.1修改控制台 1.2相关WinAPI32知识学习 1.2.1WinAPI32介绍 1.2.2 mode 命令 1.2.3 title 命令 1.2.4COORD 1.2.5GetStdHandle 1.2.6对控制台光标进行设置 1.2.6.1GetConsolrCursorInfo 1.2.6.2 CONSOLE_CURSOR_INFO 1.2.6.3SetConsol…

docker安装mysql,允许远程连接

Docker 安装MySQL sudo docker run --name some-mysql -e MYSQL_ROOT_PASSWORDroot123 -p 3306:3306 -d mysql:5.7.44允许远程连接到 MySQL 服务器,需按以下步骤操作: 进入 MySQL 容器: sudo docker exec -it some-mysql /bin/bash登录 My…

详细说一下索引和性能优化

当我们谈到数据库性能优化时,索引是一个非常重要的篇章。数据库索引是一个数据结构,它可以帮助数据库系统更快地查找数据。 什么是索引: 数据库索引是一种特殊的数据结构,它可以提高数据库查询的速度。可以简单地将数据库索引理解…

vos3000外呼系统客户端无法安装如何解决?

如果 VOS3000 外呼系统客户端无法安装,可以尝试以下解决方法: 检查系统要求: 确保你的计算机满足 VOS3000 外呼系统客户端的系统要求,包括操作系统版本、内存、处理器等。如果系统不符合要求,可能会导致安装失败或者运…

c语言中,数组取地址的书写格式

数组取地址 为了更好的区分数组取地址时的情况,我们建立两个数组,arr1一维数组和arr2二维数组,用printf函数来打印出每个例子arr1和arr2的地址,这样可以更加直观的区分出来。 首先我们看到第一组打印,可以看到若是直接…

【Git 】常用指令

Git Git是一个功能强大的分布式版本控制系统,被广泛应用于各种项目开发中。本文将为您介绍一些常用的Git指令,帮助您更好地使用Git进行版本控制。 Git的特点包括: 分布式:Git是一个分布式版本控制系统,每个开发人员都…

Qt图片等资源管理

Qt的图片等资源管理通常有两种方式 1,直接将图标和一些配置文件打包在可执行程序中 添加qrc文件,可使用qtcreator直接添加 右键选中工程 点击选择即可。 然后添加文件。我这个例子是添加了Image文件夹下的图片资源 使用的时候,可以在代码…

TCP/IP协议(二)

一、TCP-选项 1.简介 在TCP/IP报文中,固定头部下边就是 "选项"部分。 (1)TCP头部的选项部分是TCP为了适应复杂的网络环境和更好的服务应用层而进行设计的 (2)大多数的TCP选项部分出现在TCP连接建立阶段 2.构成 2.1 最大报文传输段 最大报文传输段(Ma…

Java面试八股之简述Servlet体系结构

简述Servlet体系结构 Servlet是Java Web开发中的核心组件,用于接收和响应HTTP请求,生成动态内容。它具有平台无关性、协议无关性和动态内容生成能力,遵循明确的生命周期。尽管现代Web开发中更多使用高级框架,但Servlet作为基础&a…

【SAP ME 18】SAP ME创建开发组件ear

1、说明 SC开发组件ear项目是所有sap me二次开发项目的编译入和部署入口,通过ear可以有效的针对子项目的编译和部署 2、创建开发组件

【MATLAB源码-第190期】基于matlab的32QAM系统相位偏移估计EOS算法仿真,对比补偿前后的星座图误码率。

操作环境: MATLAB 2022a 1、算法描述 1. 引言 M-QAM调制技术的重要性 现代通信系统追求的是更高的数据传输速率和更有效的频谱利用率。M-QAM调制技术,作为一种高效的调制方案,能够通过在相同的带宽条件下传输更多的数据位来满足这一需求…