首页 > 编程语言 >C# 二维码自动生成

C# 二维码自动生成

时间:2024-08-05 12:06:38浏览次数:13  
标签:string C# 生成 二维码 qrCodeBitmap var new 备注

首先先要下载一个NuGet包

代码部分:

public static Bitmap CreateQrCodeBitmap(string message, string remark, int size = 250, QRCodeGenerator.ECCLevel eccLevel = QRCodeGenerator.ECCLevel.L, int pixelsPerModule = 20, string darkColorHtmlHex = "#000000", string lightColorHtmlHex = "#FFFFFF", string iconFileFullPath = "", bool drawQuietZones = true)
{
// 创建一个新的位图对象,用于存储生成的二维码
Bitmap qrCodeBitmap = new Bitmap(size, size);

// 将输入的 HTML 十六进制颜色码转换为颜色对象
var darkColor = ColorTranslator.FromHtml(darkColorHtmlHex);
var lightColor = ColorTranslator.FromHtml(lightColorHtmlHex);
// 使用 QRCoder 库生成二维码
using (var qrGenerator = new QRCodeGenerator())
{
    // 创建二维码数据
    using (var qrCodeData = qrGenerator.CreateQrCode(message, eccLevel))
    {
        // 将二维码数据封装成 QRCode 对象
        using (var qrCode = new QRCode(qrCodeData))
        {
            // 获取二维码的位图图像,并设置像素大小、颜色及是否绘制安静区域
            qrCodeBitmap = qrCode.GetGraphic(Convert.ToInt32(size / 29), darkColor, lightColor, drawQuietZones);
        }
    }
}
// 在二维码图像上绘制备注信息
using (Graphics graphics = Graphics.FromImage(qrCodeBitmap))
{
    // 设置绘制备注信息的字体和颜色
    Font font = new Font("Arial", 10);
    Brush brush = new SolidBrush(Color.Black);
    // 测量备注信息文本的大小
    SizeF noteSize = graphics.MeasureString(remark, font);
    // 计算备注信息绘制的起始点位置
    PointF point = new PointF(
        (qrCodeBitmap.Width - noteSize.Width) / 2,
        qrCodeBitmap.Height - noteSize.Height);
    // 在二维码图像上绘制备注信息
    graphics.DrawString(remark, font, brush, point);
}
// 返回包含二维码及备注信息的位图对象
return qrCodeBitmap;

}

将输出格式转换成图片显示:

var bitmap = QrCodeHelper.CreateQrCodeBitmap(code, name, size);
// 返回Bitmap作为PNG图像
//return File(ToMemoryStream(codes, ImageFormat.Png), "image/png");
using (var memoryStream = new MemoryStream())
{
// 将Bitmap保存到内存流中
bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png);
// 将内存流转换为字节数组
byte[] imageBytes = memoryStream.ToArray();
// 将字节数组转换为Base64字符串
string base64String = Convert.ToBase64String(imageBytes);
// 返回数据URI
return new RtnMsg("成功","data:image/png;base64," + base64String);
}

标签:string,C#,生成,二维码,qrCodeBitmap,var,new,备注
From: https://www.cnblogs.com/wangsr/p/18342949

相关文章

  • ComfyUI插件:ComfyUI-BrushNet节点
    前言:学习ComfyUI是一场持久战,而ComfyUI-BrushNet是最近的局部重绘节点,其包含BrushNet和Powerpaint两个主要节点,其中BrushNet有SD1.5和SDXL两个版本,PowerPaint只有1.5的模型可以使用,学会该插件,你可以完成对图片的局部重绘以及产品换背景等多个工作流。祝大家学习顺利,早日成为Comfy......
  • 2023 福建省第三届工业互联网创新大赛CTF Misc-Covertchannel2
    题目:近日,公司Windows服务器被入侵,黑客使用了一个比较隐蔽的信道将机密凭据传输了出去,但是蛛丝马迹还是被流量采集设备捕获了,你能从中找回丢失的flag吗?分析:分析该流量包发现了有一个rsa.key,并且在数据包长度为126和119中发现了,secrets.txt和data.zip,接下来就是写脚本提......
  • 问一问神奇的ChatGPT
    Q:我们随机问\(k\)个数,取这些数的最大值\(m\),\(m\)应该不会距离\(\frac{k(k+1)}{n}\)太远的结论为什么成立?A:这个结论来自于统计学中的极值理论。具体来说,当我们从一个已知范围内随机选择一些数,并取这些数中的最大值时,这个最大值有一定的统计规律。假设我们从一个包含(\(......
  • centos安装maven
    1.下载maven去官网选择自己需要的版本  Maven–DownloadApacheMaven复制链接2.使用wget下载先切换到opt文件夹再将复制的链接使用wget下载因为wget下载速度很慢,所以这里使用https://mirrors.tuna.tsinghua.edu.cn镜像cd/optwgethttps://mirrors.tuna.tsingh......
  • C++ 动态内存管理: `std::unique_ptr
    定义与头文件std::unique_ptr的功能定义于<memory>头文件中。它主要用于管理动态分配的内存,保证资源正确释放。函数模板std::make_unique非数组类型template<classT,class...Args>unique_ptr<T>make_unique(Args&&...args);C++14起用于构造非数组类......
  • C++递归找规律典型题:派蒙的问题
    题目描述:有一天,旅行者和派蒙来到了一个未知的世界。这个世界充满了奇幻的景色和令人迷失的迷宫。他们决定一起探索这个神秘的地方,希望寻找宝藏和解开谜题。当他们穿越迷宫的时候,他们突然来到了一个巨大的房间。房间的中央有一个巨大的石头柱子,上面镶嵌着奇怪的符号和图案,上面......
  • c++递归算法较难题:分解数字
    题目描述:输入自然数 n,然后将其分拆成由若干数相加的形式,参与加法运算的数可以重复,要求输出降序排列。输入描述:一个待拆分的自然数n,(n≤50) 。输出描述:若干个拆分的加法等式。样例输入:5样例输出:5=55=4+15=3+25=3+1+15=2+2+15=2+1+1+15=1+1+1+1+1题目思想:将要分......
  • C++回溯算法经典例题:四皇后问题
    问题简介:在一个4×4的棋盘上,任意两个皇后都不能处在同一行、同一列任意两个皇后都不能处在同一斜线上(主斜线、反斜线)。题目分析:1.假设第一个皇后在(1,1):    1)在x=3时会卡死            2)在x=4时会卡死        2.假设第一个皇后在(2,1): ......
  • KingbaseES RAC部署案例之---NAS环境构建RAC
    案例说明:通过NAS共享存储作为数据库存储文件系统,构建RAC架构。适用版本:KingbaseESV008R006C008M030B0010操作系统版本:[root@node201KingbaseHA]#cat/etc/centos-releaseCentOSLinuxrelease7.9.2009(Core)集群架构:如下所示,node1和node2为集群节点:节点信息:[root@......
  • C++简单模拟:电梯问题
    问题描述:某城市最高建筑物只有一个电梯,一个请求列表是由 n 个正整数组成的。数字表示电梯将停在哪个楼层。电梯向上移动一层需要 6 秒,向下移动一层需要 4 秒。电梯每次停下会停留 5 秒,对于给定的请求列表,需要计算用于满足列表中所有请求的总时间。电梯开始时在第一层......