QRCoder1.4.3生成二维码,不依赖System.Drawing,解决"未能找到类型或命名空间名QRCode","及ImageFormatPng仅在windows上受支持"
生成二维码1(简单)
包引用:
<PackageReference Include="QRCoder" Version="1.4.3" />
using QRCoder;
/// <summary>
/// 生成二维码
/// </summary>
/// <param name="data">escape后的数据,防止中文等特殊字符引起问题</param>
/// <param name="size">二维码宽高</param>
/// <param name="level">0.L (7%), 1.M (15%), 2.Q (25%) 3.H (30%)</param>
/// <param name="border">是否包含白边</param>
/// <returns></returns>
[HttpGet]
public IActionResult Generate(string text, int size = 400, int level = 1, bool border = false)
{
if (string.IsNullOrEmpty(text))
return BadRequest("内容不能为空."); //设置最小和最大尺寸50-1920
size = size < 50 ? 50 : size > 1920 ? 1920 : size; QRCodeGenerator qrGenerator = new();
QRCodeData qrCodeData = qrGenerator.CreateQrCode(text, (QRCodeGenerator.ECCLevel)level); int pixelsPerModule = size / 21; //size = pixelsPerModule * 21
using PngByteQRCode qrCode = new(qrCodeData);
byte[] qrCodeBytes = qrCode.GetGraphic(pixelsPerModule, drawQuietZones: border); // 将字节数组转换为Base64字符串
string base64Image = Convert.ToBase64String(qrCodeBytes);
// 返回Base64字符串作为图片的src属性值 // return $"data:image/png;base64,{base64Image}";
return File(qrCodeBytes, "image/png", "QrCode.png");
}
优点:生成的base64比较小
缺点:不能控制白边的宽度
size大小需要是21的倍数,否则生成的二维码宽度<=指定的size大小
生成二维码2(自定义白边的宽度)
引用包:
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.2" />
using QRCoder;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats.Png;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
using WebApplication7.Models;
using Color = SixLabors.ImageSharp.Color;
using Image = SixLabors.ImageSharp.Image;
using Point = SixLabors.ImageSharp.Point;
[HttpGet]
public IActionResult Generate2(string text, int size = 400, int level = 1, int borderWidth = 0)
{
if (string.IsNullOrEmpty(text))
return BadRequest("内容不能为空."); //设置最小和最大尺寸50-1920
size = size < 50 ? 50 : size > 1920 ? 1920 : size; QRCodeGenerator qrGenerator = new();
QRCodeData qrCodeData = qrGenerator.CreateQrCode(text, (QRCodeGenerator.ECCLevel)level); using PngByteQRCode qrCode = new(qrCodeData);
byte[] qrCodeBytes = qrCode.GetGraphic(50, drawQuietZones: false); using MemoryStream stream = new(qrCodeBytes);
using Image<Rgba32> qrCodeImage = Image.Load<Rgba32>(stream); // 调整图像大小
qrCodeImage.Mutate(ctx => ctx.Resize(size, size)); // 添加空白来模拟白边
borderWidth = borderWidth <= 0 ? 50 : borderWidth; // 调整白边的宽度
Image<Rgba32> borderedImage = new(qrCodeImage.Width + 2 * borderWidth, qrCodeImage.Height + 2 * borderWidth);
borderedImage.Mutate(ctx => ctx.BackgroundColor(Color.White).DrawImage(qrCodeImage, new Point(borderWidth, borderWidth), 1f)); // 将调整大小后的图像保存为字节数组
using MemoryStream resizedStream = new();
borderedImage.Save(resizedStream, new PngEncoder());
byte[] resizedBytes = resizedStream.ToArray(); // 将字节数组转换为Base64字符串
string base64Image = Convert.ToBase64String(resizedBytes);
// 返回Base64字符串作为图片的src属性值 // return $"data:image/png;base64,{base64Image}";
return File(resizedBytes, "image/png", "QrCode.png");
}
优缺点与方法1相反
QRCoder1.4.3生成二维码,不依赖System.Drawing,解决"未能找到类型或命名空间名QRCode","及ImageFormatPng仅在windows上受支持"的更多相关文章
- C#通过第三方组件生成二维码(QR Code)和条形码(Bar Code)
用C#如何生成二维码,我们可以通过现有的第三方dll直接来实现,下面列出几种不同的生成方法: 1):通过QrCodeNet(Gma.QrCodeNet.Encoding.dll)来实现 1.1):首先 ...
- ASP.NET 生成二维码(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
最近做项目遇到生成二维码的问题,发现网上用的最多的是ThoughtWorks.QRCode和QrCode.Net两种方式.访问官网看着例子写了两个Demo,使用过程中发现两个都挺好用的,Thought ...
- js动态生成二维码
一.使用jquery.qrcode生成二维码 1.首先在页面中加入jquery库文件和qrcode插件 <script type="text/javascript" src= ...
- 如何使用 libqr 库生成二维码?
使用 libqr 库只需 4 步即可生成二维码 1.初始化 QRCode 结构体 QRCode *qrInit(int version, int mode, int eclevel, int mask ...
- 链接生成二维码-PHP
原文:http://www.upwqy.com/details/20.html 链接生成二维码 首先下载phpqrcode phpqrcode.zip 我这里使用的是TP5,把下载好的类库 放入到ex ...
- 使用MyQR生成二维码
from MyQR import myqr # 主要用到以下几个参数 # words:文本,可以是一个链接,或者你想说的话 # picture:你用到的图片,作为背景,不然只是一个光秃秃的二维码 # ...
- jquery动态生成二维码添加自定义logo
动态生成二维码中间带logo. jquery.qrcode.js 动态生成二维码api很简单. 引入jquer(版本任意),引入jquery.qrcode.js 不需要中间带logo这样就可以了.带l ...
- vue2.0生成二维码图片并且下载图片到本地兼容写法
vue生成二维码图片,这里使用的是qrcode.js 这个插件(亲测写法,兼容没有问题) 第一步,下载插件 需要注意,这里下载的是qrcodejs2 cnpm install --save qrcod ...
- QRCode.js一个生成二维码的javascript库
前言 最近在开发中遇到一个需求:将后端返回的链接转换成二维码,那么如何来实现呢?我们可以使用QRCode.js来解决这一问题 什么是 QRCode.js? QRCode.js 是一个用于生成二维码的 ...
- Vue中qrcode的使用方法(生成二维码插件) / 前端页面根据URL链接生成二维码
1.下载 npm install qrcode --save-dev 2.引入(在所需要的页面中引入) import QRCode from "qrcode"; //引入生成二维码 ...
随机推荐
- JuiceFS 目录配额功能设计详解
JuiceFS 在最近 v1.1 版本中加入了社区中呼声已久的目录配额功能.已发布的命令支持为目录设置配额.获取目录配额信息.列出所有目录配额等.完整的详细信息,请查阅文档. 在设计此功能时,对于它的 ...
- 快速掌握keepalived
转载请注明出处: Keepalived是一个基于VRRP(虚拟路由冗余协议)的开源软件,用于在Linux系统上实现高可用性和负载均衡.它的主要功能是通过多台服务器之间的协作,确保在其中一台服务器发生故 ...
- Mac OS安装Python的pip
最近牛牛的同学在学习python,但当他使用numpy时出现了报错(。•́︿•̀。) 原因为他的python没有numpy这个库(这个故事很典).然鹅雪上加霜的是,他的电脑是Mac,没有Windows ...
- JS中的caller属性
JS中的caller属性: 这个属性会返回一个调用该函数对象的外层函数引用.也就是说,如果我们是在函数B()中调用函数A()的,那么只要在A()中调用A.caller,结果就会返回B()functio ...
- Util应用框架核心(一) - 服务配置
本文介绍在项目中如何配置 Util 依赖服务. 文章分为多个小节,如果对设计原理不感兴趣,只需要阅读基础用法部分即可. 基础用法 Asp.Net Core 项目服务配置 调用 WebApplicati ...
- ALSA Compress-Offload API
概述 从 ALSA API 的早期开始,它就被定义为支持 PCM,或考虑到了 IEC61937 等固定比特率的载荷.参数和返回值以帧计算是常态,这使得扩展已有的 API 以支持压缩数据流充满挑战. 最 ...
- 线性表应用:魔术师发牌与拉丁(Latin)方阵(循环链表)
题目描述: 有黑桃1到13,13张牌,成某种顺序,魔术师可以从1开始数 ,数1,背面朝上的13张牌第一张就是1,然后放到桌面上,然后从1开始数,把第一张放在所有牌下面,数到2,翻开,就是2,再放到桌子 ...
- (Good topic)哈希表:最长回文串(3.19 leetcode每日打卡)
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串. 在构造过程中,请注意区分大小写.比如 "Aa" 不能当做一个回文字符串. 注意: 假设字符串的长度不 ...
- 龙芯发布 .NET 8 SDK 8.0.100-ea1(试用版)
随着.NET 8的发布,国内的社区朋友们也很关心龙芯.NET 团队对于Loongarch .NET 8的发布时间,目前从龙芯.NET编译器团队已经在龙芯.NET 官网上发布龙芯.NET 8 SDK-8 ...
- windows server 2019 2012 server 2022 无线网卡驱动安装报错,无线网卡驱动不能安装, inf服务安装段落无效
windows server 2019 无线网络 服务安装段落无效 windows server 2019 无线网卡驱动安装报错,无线网卡驱动不能安装, inf服务安装段落无效 indows serv ...