开发人员在试着使用.NET Core进行应用开发时可能会发现其中一个缺点,那就是缺乏基于图像的API。在那些较流行的API中有值得称道的System.Drawing,但在.NET Core中却无法使用它,因为它依赖于Windows GDI+ 接口。幸运的是,许多开发者社区已经投身其中,去开发支持.NET Core的图像类库。
\u0026#xD;\n\u0026#xD;\n
微软的Bertrand Le Roy提供了一个不同类库的调查比较,以考量它们的适合性,他的初步调查为比较以下四个实现的输出和性能提供了很有价值的参考依据:
\u0026#xD;\n\u0026#xD;\n
- CoreCompat.System.Drawing\u0026#xD;\n
开发人员使用已经依赖System.Drawing 的代码将发现CoreCompat.System.Drawing 类图很有帮助,因为它最容易替换。然而,应注意当在Windows上运行时它会遇到死锁问题。
\u0026#xD;\n\u0026#xD;\n
ImageSharp 是一个由纯托管代码编写的新库。这使它具有非常好的跨平台支持能力,未使用原生代价的是牺牲了较高的性能。
\u0026#xD;\n\u0026#xD;\n
Magick.NET 是针对ImageMagick类库的基于.NET的一个包装器。它提供了大量的功能,而且Le Roy认为其产出物具有最好的图像质量,但当前仅支持Windows上的.NET Core。Magick.NET的作者Dirk Lemstra想要提供一个自身跨平台的ImageMagick,以支持其他的平台。
\u0026#xD;\n\u0026#xD;\n
SkiaSharp 有一个针对谷歌Skia跨平台2d图像类库的 .NET包装器,然而这不支持.NET Core。Miguel de Icaza 说为了提供.NET Core支持需要克服这一挑战。
\u0026#xD;\n\u0026#xD;\n
在Le Roy的结论中,哪个类库最合适实际上取决于你的需求。如果你的应用可以容忍潜在的死锁问题,那么CoreCompate.System.Drawing是更为高效的一个选择。Magick.NET 在质量和文件类型的支持上最好。最后一个ImageSharp从纯托管代码中得到了好处,但其性能要落后于其他的类库,由于它正在积极地开发之中,所以在不久的将来可能会得到进一步优化。
\u0026#xD;\n\u0026#xD;\n
查看英文原文:Image Libraries for .NET Core