ASP.NET 核心中的服务器端图形

Server-side graphics in ASP.NET Core

我最近将 ASP.NET MVC 应用程序从 ASP.NET 升级到 ASP.NET Core。

在我的控制器操作中,我有一段代码依赖 System.Drawing 创建个人资料图片

using (FileStream stream = new FileStream(HttpContext.Server.MapPath($"~/Content/UserFiles/{AuthenticatedUser.Id.ToString()}.jpg"), FileMode.OpenOrCreate))
{
    Image image = Image.FromStream(model.DisplayPicture.InputStream);
    image.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
}

图像数据作为 Base64 编码图像发布到服务器

data:image/png;base64,....

由于.NET Core 中没有System.Drawing,是否有任何其他库可以实现这一点?

正如 Stanislav 指出的那样,当前的解决方案是在完整的 .NET 框架上使用 ASP.NET Core。 System.Drawing 依赖于 GDI+ 调用,因此绑定到 Windows。

Imazen 的 vNext Version of Image Resizer 将基于新的 imageflow 项目解决这个问题。 System.Drawing 不应在 ASP.NET 等服务器环境中使用(在 https://msdn.microsoft.com/en-us/library/system.drawing(v=vs.110).aspx). Some background on this topic is provided on https://github.com/imazen/Graphics-vNext 上指出)。

我建议使用当前版本的 ImagerResizing 4.0.5 并在几个月内升级(第一个稳定的 vNext 版本将于明年发布)。

如果您只想将 base64 转换为图像文件,则不需要 System.Drawing。我正在我的 cloudscribe.SimpleContent 项目中这样做。用户在所见即所得编辑器中添加图像和内容,当它发回服务器时,我将它们转换为文件并解析文件的 URL 以更新内容,以便它链接到新文件。

你可以在这里看到我的工作代码:https://github.com/joeaudette/cloudscribe.SimpleContent/blob/master/src/cloudscribe.SimpleContent.Web/Services/FileSystemMediaProcessor.cs

我们确实需要 System.Drawing 或其他一些工具来调整和优化图像。有一个 ImageSharp project here 正在处理这个问题,但我不确定目前有多少功能准备就绪

刚看到你的问题。现在在 2019 年,在 ASP.NET 核心和服务器端使用 System.Drawing 的问题仍然需要一些调查。

我在 NuGet 中找到了名为 "System.Drawing.Common" 的包,它有 API 和 System.Drawing 一样,可以作为替代。

有关此包的更多信息,请参阅 here 比较性能和质量的包列表。