使用 .NET Core 处理图像

Posted

技术标签:

【中文标题】使用 .NET Core 处理图像【英文标题】:Manipulating images with .NET Core 【发布时间】:2016-01-25 11:03:48 【问题描述】:

我已将我的项目从 .NET 4.5 更新到 .NET Core(使用 ASP.NET Core)。我以前的版本中有一些非常简单的代码,它使用来自System.Drawing 的位图对象来调整图像大小。

据我了解,System.Drawing 不能在 .NET Core 中使用,因为它不是跨平台的,但可以用什么代替?

我用谷歌搜索了这个,找不到任何东西。我唯一能找到的是this 帖子,上面没有任何代码。

【问题讨论】:

在您链接的 github 上找到 this。有用吗? Resize images with MVC 6 on Ubuntu running ASP.NET 5 on Mono的可能重复 据我了解,.NET (Core) 团队仍在与 Xamarin 团队讨论此问题。 Xamarin 构建了一个名为 SkiaSharp 的库,它是跨平台 Skia 库的包装器,它又是 Google Chrome 的图形库。它可以在 androidios、Linux、Windows 等环境下运行,这将使其成为 .NET Core 的完美匹配。但截至今天,他们还没有完成 .NET Core (blog.xamarin.com/cross-platform-2d-graphics-with-skiasharp)。我敢打赌,这个库将成为 .NET Core 和绘图的未来故事。 添加更多事实以帮助@Thomas SkiaSharp can be dated back to 2012 as part of XobotOS。 Xamarin 最近提供了它,因此它可以单独使用,也可以用作未来 2D 渲染框架的基础(例如 System.Drawing 在 SkiaSharp 上而不是 GDI+/libgdiplus)。 .NET Core 支持在 github.com/mono/SkiaSharp/issues/20 中跟踪 Bertrand Le Roy blogs.msdn.microsoft.com/dotnet/2017/01/19/…987654327@ 于 2017 年 1 月 19 日发布的关于此主题的更新链接 【参考方案1】:

免责声明:这是我的软件。

我正在开发一个在 .NET Core 上运行的跨平台 2D 图形库。它目前是 alpha,但已经支持全面的功能集。

https://github.com/JimBobSquarePants/ImageSharp

示例用法。

using (FileStream stream = File.OpenRead("foo.jpg"))
using (FileStream output = File.OpenWrite("bar.jpg"))

    Image image = new Image(stream);
    image.Resize(image.Width / 2, image.Height / 2)
         .Greyscale()
         .Save(output);

【讨论】:

那么在特定的操作系统画布上绘图呢?有没有人将它从操作系统中抽象出来? TK 有一个 .Net Core 图形库。我希望最终有一个 UI 库,但它可能会包装 TK。 @IAbstract TK,你有分享链接吗? 完美。零依赖和全范围的格式。谢谢!【参考方案2】:

您现在可以使用官方(来自 Microsoft)System.Drawing.Common NuGet 包。

【讨论】:

@DougS 不,它是跨平台的。在这里查看讨论github.com/dotnet/corefx/issues/20325 @DougS 是的,我同意标题令人困惑。 查看 Scott Hanselman 关于如何使用 System.Drawing.Common 的博客:hanselman.com/blog/HowDoYouUseSystemDrawingInNETCore.aspx 这是一个糟糕的解决方案,因为依赖和巨大的规模。请参阅@James South 答案 @AlekDepler 在撰写 James South 的答案(2018 年)库时,答案确实有问题。我当时测试了它和许多替代方案。可能它不是最好的,但至少我可以为企业解决方案推荐 System.Drawing.Common 库。它提供一致且可靠的结果。【参考方案3】:

我发现了一个 System.Drawing for .NET Core 的实现,基于 Mono 的源代码,维护在:

https://github.com/CoreCompat/CoreCompat

NuGet 包位于:

https://www.nuget.org/packages/CoreCompat.System.Drawing

您可以在 .NET Core 应用程序的 project.json 中引用它:


  "dependencies": 
    "CoreCompat.System.Drawing": "1.0.0-beta006",
    ...
  ,

【讨论】:

这是预发行版软件,因此请确保勾选“显示预发行版”框。 此软件包已被标记为已弃用,自 2016 年 6 月 27 日以来未收到任何更新。【参考方案4】:

Aspose.Drawing 可以使用与 System.Drawing 兼容、完全托管和跨平台的 API 操作图像,并支持 .NET Core 2.0+。 (我是开发人员之一。)

【讨论】:

以上是关于使用 .NET Core 处理图像的主要内容,如果未能解决你的问题,请参考以下文章

如何在 .Net Core 2.0 中使用 ZXing.Net 和 ImageSharp 创建条码图像

使用 ASP.NET Core MVC,如何显示图像?

text 使用ImageSharp调整ASP.NET Core中的图像大小

.NET Core Web API 中的图像上传

从 ASP.Net Core 中的 wwwroot/images 获取图像

使用 ASP.NET Core Web API 将图像上传到 Cloudianary 时出现空文件错误