使用QRCoder開源庫唯绍,github地址: https://github.com/codebude/QRCoder
本文源碼:https://github.com/forestGzh/QRCoderDemo
在visual studio中,可以通過NuGet軟件包管理器搜索QRCoder去安裝QRCoder,也可以在NuGet軟件包管理器控制臺中運行以下命令:Install-Package QRCoder
生成二維碼:
引入:
using QRCoder;
/// <summary>
/// 獲取二維碼
/// </summary>
/// <returns></returns>
[HttpGet("QRCode")]
public ActionResult QRCode()
{
QRCodeGenerator qrGenerator = new QRCodeGenerator();
string playload = "888";
QRCodeData qrCodeData = qrGenerator.CreateQrCode(playload, QRCodeGenerator.ECCLevel.H);
QRCode qrCode = new QRCode(qrCodeData);
Bitmap qrCodeImage = qrCode.GetGraphic(10, Color.Black, Color.White, null, 15, 6, true);
var bitmapBytes = BitmapToBytes(qrCodeImage);
return File(bitmapBytes, "image/jpeg");
}
private static byte[] BitmapToBytes(Bitmap img)
{
using (MemoryStream stream = new MemoryStream())
{
img.Save(stream, ImageFormat.Jpeg);
return stream.GetBuffer();
}
}
在linux環(huán)境中發(fā)布時,生成的二維碼會出錯,出錯提示
fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]
An unhandled exception has occurred while executing the request.
System.TypeInitializationException: The type initializer for 'Gdip' threw an exception. ---> System.DllNotFoundException: Unable to load DLL 'libgdiplus': The specified module could not be found.
,原因應(yīng)該是System.Drawing.Common這個組件在linux中的問題,System.Drawing.Common 組件使用圖形功能依賴于GDI+,但是在Linux上是沒有GDI+的。Mono團隊使用libgdiplus實現(xiàn)了GDI+接口谷羞,使linux系統(tǒng)可以訪問GDI+接口。
在linux系統(tǒng)中找不到libgdiplus溜徙,就報錯了湃缎,
在linux系統(tǒng)中安裝(本文是在centos環(huán)境中),其他linux發(fā)行版可以查一下有沒有l(wèi)ibgdiplus蠢壹,沒有的話去github找找嗓违,用源碼編譯一個
apt-get update
apt-get install libgdiplus -y
ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll
在docker容器中運行的話在Dockerfile文件中加上
RUN apt-get update -y && apt-get install -y libgdiplus && apt-get clean && ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll