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

本文关键字:服务器端 图形 NET 核心 ASP | 更新日期: 2023-09-27 17:56:12

我最近将一个 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,是否有任何其他库可以实现此目的?

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

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

Imazen的vNext版本的Image Resizer将基于新的imageflow项目解决这个问题。System.Drawing不应该在像 ASP.NET 这样的服务器环境中使用(在 https://msdn.microsoft.com/en-us/library/system.drawing(v=vs.110).aspx中指出)。https://github.com/imazen/Graphics-vNext 提供了有关此主题的一些背景知识。

我建议在几个月内使用当前版本的 ImagerRessize 和升级(明年宣布第一个稳定的 vNext 版本)。

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

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

我们需要System.Drawing或其他工具来调整图像大小和优化图像。这里有一个ImageSharp项目正在研究这个问题,尽管我不确定目前有多少功能已经准备就绪。

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

我在NuGet中找到了名为"System.Drawing.Common"的包,它具有类似System.Drawing的API,可以用作替代品。

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