歡迎光臨
每天分享高質量文章

.NET Core 生成二維碼

來源:蝸牛丨

cnblogs.com/alan-lin/p/9193290.html

其實生成二維碼的元件有很多種,如:QrcodeNet,ZKWeb.Fork.QRCoder,QRCoder等

我選QRCoder,是因為小而易用、支援大併發生成請求、不依賴任何庫和網路服務。

既然是.net core 那當然要用依賴註入,透過建構式註入到控制器。

軟體版本

Asp.net Core:2.0

QRCoder:1.3.3(開發時最新)

專案結構

Snai.QRCode.Api  Asp.net core 2.0 Api網站

專案實現

新建Snai.QRCode解決方案,在解決方案下新建一個名Snai.QRCode.Api Asp.net core 2.0 Api網站

在 依賴項 右擊 管理NuGet程式包 瀏覽 找到 QRCoder 版本1.3.3 下載安裝 

由於使用依賴註入,依賴抽象不依賴實現,所以要建一個實現二維碼的介面

在專案新增 Common 檔案夾,在檔案夾新增 IQRCode 二維碼介面,介面定義 GetQRCode 二維碼方法,程式碼如下

using System;

using System.Collections.Generic;

using System.Drawing;

using System.Linq;

using System.Threading.Tasks;

namespace Snai.QRCode.Api.Common

{

    public interface IQRCode

    {

        Bitmap GetQRCode(string url, int pixel);

    }

}

在 Common 目錄下新增 RaffQRCode 類,繼承IQRCode介面實現GetQRCode類,程式碼如下

using QRCoder;

using System;

using System.Collections.Generic;

using System.Drawing;

using System.Linq;

using System.Threading.Tasks;

namespace Snai.QRCode.Api.Common

{

    public class RaffQRCode : IQRCode

    {

        ///

        /// 

        ///

        /// 儲存內容

        /// 畫素大小

        ///

        public Bitmap GetQRCode(string url, int pixel)

        {

            QRCodeGenerator generator = new QRCodeGenerator();

            QRCodeData codeData = generator.CreateQrCode(url, QRCodeGenerator.ECCLevel.M, true);

            QRCoder.QRCode qrcode = new QRCoder.QRCode(codeData);

            Bitmap qrImage = qrcode.GetGraphic(pixel, Color.Black, Color.White, true);

            return qrImage;

        }

    }

}

修改Startup.cs程式碼,註入RaffQRCode類到容器

程式碼如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Threading.Tasks;

using Microsoft.AspNetCore.Builder;

using Microsoft.AspNetCore.Hosting;

using Microsoft.Extensions.Configuration;

using Microsoft.Extensions.DependencyInjection;

using Microsoft.Extensions.Logging;

using Microsoft.Extensions.Options;

using Snai.QRCode.Api.Common;

namespace Snai.QRCode.Api

{

    public class Startup

    {

        public Startup(IConfiguration configuration)

        {

            Configuration = configuration;

        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.

        public void ConfigureServices(IServiceCollection services)

        {

            services.AddSingleton();

            services.AddMvc();

        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)

        {

            if (env.IsDevelopment())

            {

                app.UseDeveloperExceptionPage();

            }

            app.UseMvc();

        }

    }

}

在Controllers 下新增QRCodeController Api空的控制器,採用建構式依賴,引入RaffQRCode類

新增GetQRCode(string url, int pixel)方法,加入HttpGet(“/api/qrcode”)路由地址,方法裡使用_iQRCode.GetQRCode(url, pixel)生成二維碼再輸出

程式碼如下:

using System;

using System.Collections.Generic;

using System.Drawing.Imaging;

using System.IO;

using System.Linq;

using System.Threading.Tasks;

using Microsoft.AspNetCore.Mvc;

using Snai.QRCode.Api.Common;

namespace Snai.QRCode.Api.Controllers

{

    public class QRCodeController : Controller

    {

        private IQRCode _iQRCode;

        public QRCodeController(IQRCode iQRCode)

        {

            _iQRCode = iQRCode;

        }

        ///

        /// 獲取二維碼

        ///

        /// 儲存內容

        /// 畫素大小

        ///

        [HttpGet(“/api/qrcode”)]

        public void GetQRCode(string url, int pixel)

        {

            Response.ContentType = “image/jpeg”;

            var bitmap = _iQRCode.GetQRCode(url, pixel);

            MemoryStream ms = new MemoryStream();

            bitmap.Save(ms, ImageFormat.Jpeg);

            Response.Body.WriteAsync(ms.GetBuffer(), 0, Convert.ToInt32(ms.Length));

            Response.Body.Close();

        }

    }

}

到此所有程式碼都已編寫完成

啟動執行專案,在瀏覽器開啟 http://localhost:5000//api/qrcode?url=http://www.baidu.com&pixel;=4 地址,得到url引數域名的二維碼

/* GetGraphic方法引數說明

   

public Bitmap GetGraphic(int pixelsPerModule, Color darkColor, Color lightColor, Bitmap icon = null, int iconSizePercent = 15, int iconBorderWidth = 6, bool drawQuietZones = true)

    int pixelsPerModule:生成二維碼圖片的畫素大小 ,我這裡設定的是5 

    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

*/

原始碼訪問地址:https://github.com/Liu-Alan/Snai.QRCode


●編號134,輸入編號直達本文

●輸入m獲取文章目錄

推薦↓↓↓

Web開發

更多推薦18個技術類公眾微信

涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

贊(0)

分享創造快樂