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版本的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上提供了有关此主题的一些背景知识。
我建议使用当前版本4.0.5的ImagerResizing并在几个月内升级(第一个稳定的vNext版本将在明年公布)。
如果你要做的只是将base64转换为图像文件,则不需要System.Drawing。 我在我的cloudscribe.SimpleContent项目中这样做。 用户在wysiwyg编辑器中添加图像和内容,当它回发到服务器时,我将它们转换为文件并解析文件的URL以更新内容,以便链接到新文件。
你可以在这里看到我的工作代码: https : //github.com/joeaudette/cloudscribe.SimpleContent/blob/master/src/cloudscribe.SimpleContent.Web/Services/FileSystemMediaProcessor.cs
我们需要System.Drawing或其他一些工具来调整和优化图像。 这里有一个ImageSharp项目正在进行中,虽然我不确定目前有多少function已准备就绪