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

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

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

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

【问题讨论】:

标签: c# asp.net-core .net-core system.drawing


【解决方案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 的源代码,维护在:

NuGet 包位于:

您可以在 .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+。 (我是开发人员之一。)

【讨论】:

    猜你喜欢
    • 2016-12-13
    • 2010-11-10
    • 2019-05-18
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多