C# 二维码自动生成

首先先要下载一个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);
}

posted @   長楽  阅读(84)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示