二維碼的生成有好多種方式,本篇將使用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 = 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,則掃描二維碼的時候會直接打開鏈接,還是很方便人性化的。