.NET Core 图片操作在 Linux/Docker 下的坑

 

一.前言

.NET Core 目前更新到2.2了,但是直到现在在 .NET Core 本身依然不包括和图片有关的 Image、Bitmap 等类型。对于图片的操作在我们开发中很常见,比如:生成验证码、二维码等等。在 .NET Core 的早期版本中,有 .NET 社区开发者实现了一些 System.Drawing 的 Image等类型实现的组件,比如 CoreCompat.System.DrawingZKWeb.System.Drawing等。后来微软官方提供了一个组件 System.Drawing.Common实现了 System.Drawing 的常用类型,以 Nuget 包的方式发布的。今天就围绕它来讲一讲这里面的坑。

在 .NET Core 中可以通过安装 System.Drawing.Common 来使用 Image、Bitmap 等类型。

二.寻坑

本文将以一个 ASP.NET Core 项目使用 QRCoder 组件来生成一个二维码作为示例。

1.新建一个 ASP.NET Core 项目

2.安装 QRCoder

dotnet add package QRCoder

QRCoder是一个非常强大的生成二维码的组件,它使用了 System.Drawing.Common ,所以安装它用来做测试。

3.打开 ValuesController,添加如下代码:

[Route("api/[controller]")] [ApiController] public class ValuesController : ControllerBase {     [HttpGet]     public FileResult Get()     {         QRCodeGenerator.ECCLevel eccLevel = QRCodeGenerator.ECCLevel.L;         using (QRCodeGenerator qrGenerator = new QRCodeGenerator())         {             using (QRCodeData qrCodeData = qrGenerator.CreateQrCode("Hello .NET Core", eccLevel))             {                 using (QRCode qrCode = new QRCode(qrCodeData))                 {                     Bitmap bp = qrCode.GetGraphic(20, Color.Black, Color.White,true);                     return File(Bitmap2Byte(bp), "image/png", "hello-dotnetcore.png");                 }             }         }     }      public static byte[] Bitmap2Byte(Bitmap bitmap)     {         using (MemoryStream stream = new MemoryStream())         {             bitmap.Save(stream, ImageFormat.Jpeg);             byte[] data = new byte[stream.Length];             stream.Seek(0, SeekOrigin.Begin);             stream.Read(data, 0, Convert.ToInt32(stream.Length));             return data;         }     }

上面的代码生成了一个二维码,通过API返回,文件名为 hello-dotnetcore.png

4.运行

(1)Windows

在 Windows 环境下我们直接运行,打开浏览器访问 http://localhost:5000/api/values

1545645378722

查看该图片:

1545645410915

一切正常

(2)Linux 或者 Docker(Linux)

Docker(Linux)指:以Linux系统为基础的镜像

我们将代码原封不动的拷贝到 Linux 上运行

1545645647336

使用curl访问

curl http://localhost:5000/api/values

查看日志输出可以见到报错了

关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信