生成二维码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上受支持"的更多相关文章

  1. C#通过第三方组件生成二维码(QR Code)和条形码(Bar Code)

    用C#如何生成二维码,我们可以通过现有的第三方dll直接来实现,下面列出几种不同的生成方法: 1):通过QrCodeNet(Gma.QrCodeNet.Encoding.dll)来实现 1.1):首先 ...

  2. ASP.NET 生成二维码(采用ThoughtWorks.QRCode和QrCode.Net两种方式)

    最近做项目遇到生成二维码的问题,发现网上用的最多的是ThoughtWorks.QRCode和QrCode.Net两种方式.访问官网看着例子写了两个Demo,使用过程中发现两个都挺好用的,Thought ...

  3. js动态生成二维码

    一.使用jquery.qrcode生成二维码 1.首先在页面中加入jquery库文件和qrcode插件 <script type="text/javascript" src= ...

  4. 如何使用 libqr 库生成二维码?

    使用 libqr 库只需 4 步即可生成二维码 1.初始化 QRCode 结构体 QRCode *qrInit(int version, int mode, int eclevel, int mask ...

  5. 链接生成二维码-PHP

    原文:http://www.upwqy.com/details/20.html 链接生成二维码 首先下载phpqrcode phpqrcode.zip 我这里使用的是TP5,把下载好的类库 放入到ex ...

  6. 使用MyQR生成二维码

    from MyQR import myqr # 主要用到以下几个参数 # words:文本,可以是一个链接,或者你想说的话 # picture:你用到的图片,作为背景,不然只是一个光秃秃的二维码 # ...

  7. jquery动态生成二维码添加自定义logo

    动态生成二维码中间带logo. jquery.qrcode.js 动态生成二维码api很简单. 引入jquer(版本任意),引入jquery.qrcode.js 不需要中间带logo这样就可以了.带l ...

  8. vue2.0生成二维码图片并且下载图片到本地兼容写法

    vue生成二维码图片,这里使用的是qrcode.js 这个插件(亲测写法,兼容没有问题) 第一步,下载插件 需要注意,这里下载的是qrcodejs2 cnpm install --save qrcod ...

  9. QRCode.js一个生成二维码的javascript库

    前言 最近在开发中遇到一个需求:将后端返回的链接转换成二维码,那么如何来实现呢?我们可以使用QRCode.js来解决这一问题 什么是 QRCode.js? QRCode.js 是一个用于生成二维码的 ...

  10. Vue中qrcode的使用方法(生成二维码插件) / 前端页面根据URL链接生成二维码

    1.下载 npm install qrcode --save-dev 2.引入(在所需要的页面中引入) import QRCode from "qrcode"; //引入生成二维码 ...

随机推荐

  1. Oracle-复制表结构存在的问题

    在生产中,创建一个新表tbl_A,要求与已有表结构tbl_B一致 create table tbl_A AS select * from tbl_B where 1=2; --拷贝表结构tbl_B给t ...

  2. 13. 用Rust手把手编写一个wmproxy(代理,内网穿透等), HTTP中的压缩gzip,deflate,brotli算法

    用Rust手把手编写一个wmproxy(代理,内网穿透等), HTTP中的压缩gzip,deflate,brotli算法 项目 ++wmproxy++ gite: https://gitee.com/ ...

  3. C# ref, in, out关键字

    写在前面:大内老A的这篇"老生常谈:值类型VS引用类型"放在微信收藏里好几个月了,终于趁着要讲JAVA传参机制的时候仔细地按照这篇博客,自己写代码跑一下,对C#的传参,ref,in ...

  4. PolarD&N2023秋季个人挑战—Crypto全解

    EasyRSA (额..这个题看错了不是挑战赛的.这里当做好题记录下来了) 题目信息:500 分 5 Polar币 from Crypto.Util.number import bytes_to_lo ...

  5. DASCTF X CBCTF 2023|无畏者先行(Misc WP)

    justpaint 1.题目信息 FLAG被我弄丢了>_<不过,JBN应该记得,或许你能从他那得到一些线索. 附件是压缩包有密码.. 2.解题方法 暴力破解压缩包,测试长度为6,选择所有数 ...

  6. List 切割成小 list 分批处理数据

    使用 Google Guava 库中的方法对 bmList 进行分割. Lists.partition() 方法用于将一个列表按指定大小进行分割,返回一个包含分割后子列表的新列表. 在这个例子中,bm ...

  7. Windows上的多jdk版本管理工具

    前言 Java在Windows上因为版本太多导致难以管理,这个项目可以很好的解决这点 项目地址 GitHub - ystyle/jvms: JDK Version Manager (JVMS) for ...

  8. Windows上使用pm2运行Net Core项目

    .net core发布的时候会有一个.exe的文件,使用pm2运行这个文件就可以了. pm2 start xxx.exe --name="xxxx"

  9. C/C++字符函数库<ctype.h>/<cctype>(常用)

    头文件:<ctype.h> 形式:int 函数(int c)  参数:传入的一定是一个字符或者EOF 返回值:满足条件返回非0(true),否则返回0: int isalnum(int c ...

  10. null 不好,我真的推荐你使用 Optional

    "Null 很糟糕." - Doug Lea. Doug Lea 是一位美国的计算机科学家,他是 Java 平台的并发和集合框架的主要设计者之一.他在 2014 年的一篇文章中说过 ...