.NET Core 生成二維碼

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章