.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,則掃描二維碼的時候會直接打開鏈接,還是很方便人性化的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM