使用.net Core操作图像

本文关键字:图像 操作 Core net 使用 | 更新日期: 2023-09-27 18:19:11

我已经更新了我的项目从。net 4.5到。net Core(与ASP。网络核心)。在之前的版本中,我有一些非常简单的代码,使用System.Drawing中的位图对象来调整图像大小。

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

我已经谷歌了这个,找不到任何东西。我唯一能找到的是这篇文章,上面没有任何代码。

使用.net Core操作图像

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

我正在开发一个跨平台的2D图形库,它运行在。net Core上,它目前是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);
}

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


请注意,这是从。net 6开始的windows版本(它曾经是。net Core和。net 5的跨平台版本),它仍然可以在。net 6中工作,在其他平台上使用特殊开关。

来自Microsoft文档的建议操作:

要在跨平台应用程序中使用这些api,请迁移到以下库之一:

  • ImageSharp
  • SkiaSharp
  • Microsoft.Maui.Graphics

或者,您可以通过在runtimeconfig.json文件中将System.Drawing.EnableUnixSupport运行时配置开关设置为true来启用。net 6对非windows平台的支持:

{
   "configProperties": {
      "System.Drawing.EnableUnixSupport": true
   }
}
添加这个配置开关是为了给严重依赖这个包的跨平台应用程序迁移到更现代的库的时间。然而,非windows的bug将不会被修复。此外,此开关已在。net 7中删除。

我找到了System的实现。基于Mono源代码的。net Core绘图维护在:

  • https://github.com/CoreCompat/CoreCompat

NuGet包在:

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

你可以在你的。net Core App的project.json中引用它:

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

Aspose。绘图可以使用与系统兼容的API操作图像。绘图,完全管理和跨平台的。net Core 2.0+支持。(我也是开发者之一)