当前位置: 代码网 > it编程>编程语言>C# > C#使用ThoughtWorks.QRCode生成二维码

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

2024年05月26日 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生成二维码的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com