二維碼的生成有好多種方式,本篇將使用QRCoder來實作,小巧易用,支持并發生成,不依賴第三方庫,
開源地址:https://github.com/codebude/QRCoder
先在專案中添加組件
Install-Package QRCoder
然后添加一個生成二維碼的介面,并且實作
using QRCoder;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
public interface IQRCode
{
byte[] GenerateQRCode(string content);
}
public class QRCode : IQRCode
{
public byte[] GenerateQRCode(string content)
{
var generator = new QRCodeGenerator();
var codeData = https://www.cnblogs.com/meowv/p/generator.CreateQrCode(content, QRCodeGenerator.ECCLevel.M, true);
QRCoder.QRCode qrcode = new QRCoder.QRCode(codeData);
var bitmapImg = qrcode.GetGraphic(10, Color.Black, Color.White, false);
using MemoryStream stream = new MemoryStream();
bitmapImg.Save(stream, ImageFormat.Jpeg);
return stream.GetBuffer();
}
}
qrcode.GetGraphic(...)默認回傳了Bitmap型別,這里處理成了byte[],
qrcode.GetGraphic(...)方法引數簡單說明,可以根據開發時候的注釋說明進一步了解,
public Bitmap GetGraphic(int pixelsPerModule, Color darkColor, Color lightColor, Bitmap icon = null, int iconSizePercent = 15, int iconBorderWidth = 6, bool drawQuietZones = true)
{
// int pixelsPerModule 生成二維碼圖片的像素大小
// Color darkColor 暗色 一般設定為Color.Black 黑色
// Color lightColor 亮色 一般設定為Color.White 白色
// Bitmap icon 二維碼水印圖示 例如:Bitmap icon = new Bitmap(context.Server.MapPath("~/images/zs.png"));默認為NULL ,加上這個二維碼中間會顯示一個圖示
// int iconSizePercent 水印圖示的大小比例 ,可根據自己的喜好設定
// int iconBorderWidth 水印圖示的邊框
// bool drawQuietZones 靜止區,位于二維碼某一邊的空白邊界,用來阻止讀者獲取與正在瀏覽的二維碼無關的資訊,即是否繪畫二維碼的空白邊框區域 默認為true
}
在控制器中注入呼叫
using Microsoft.AspNetCore.Mvc;
[Route("api/[controller]")]
[ApiController]
public class QrCodeController : ControllerBase
{
[HttpGet]
public FileContentResult QrCode([FromServices] IQRCode _qrcode, string content)
{
var buffer = _qrcode.GenerateQRCode(content);
return File(buffer, "image/jpeg");
}
}
QRCoder會根據content的內容來生成對應的二維碼,如果傳入的是純文本,則回傳文本內容,如果傳入的是一個標準的URL,則掃描二維碼的時候會直接打開鏈接,還是很方便人性化的,

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/51.html
標籤:.NET Core
