Linux中的System.Drawing

如果您曾经必须在 Linux 上运行 .NET Core 应用程序,您可能已经注意到主要问题之一是标准 .NET Core 包中缺少 System.Drawing 程序集。尽管 Microsoft 建议使用 System.Drawing.Common,但这并不是最终的解决方案。您必须在每台用户机器上运行“sudo”才能安装 libgdiplus 库。即使在那之后,您的渲染结果也会与您在 Windows 机器上的渲染结果略有不同。为了解决这个问题,本文介绍了如何在没有 libgdiplus 库的情况下在 Linux 中使用 System.Drawing。

在 Linux 上使用 System.Drawing

幸运的是,现在我们有了解决方案。下面我们将演示我们的 .NET 图形 API Aspose.Drawing for .NET 如何帮助您在 Linux 中使用 System.Drawing。使用 Aspose.Drawing,您可以摆脱带有原生代码的图形库,让您的图像在所有平台上看起来都一样。

.NET 图形 API - 易于安装

要在目标 Linux 机器上安装 Aspose.Drawing,您只需要安装 .NET Core。将 Aspose.Drawing.dll 放入您的项目文件夹并运行程序。就这样。现在,您可以使用 System.Drawing 命名空间中的类,就像在 Windows 上的 .NET Framework 应用程序中一样。

要获取 Aspose.Drawing 二进制文件,请从官方网站 下载 最新版本。或者,您可以通过运行以下命令将 API 直接包含在您的项目中。

dotnet add package Aspose.Drawing

不需要额外的组件。 Aspose.Drawing 在不引用任何本地库的情况下自行完成所有绘图。您将永远不会收到如下消息:

Unable to load DLL 'libgdiplus': The specified module could not be found.

而且您不必关心您平台上安装的图形系统的版本。

没有不可预测的平台问题

使用 System.Drawing.Common 运行在 Windows 上成功运行的代码时,您可能会在 Linux 上遇到不可预知的错误:

WARNING *: Path conversion requested 34759680 bytes (2480 x 3504). Maximum size is 8388608 bytes.
ERROR:region.c:1155:GdipCombineRegionPath: assertion failed: (region->bitmap)

Aspose.Drawing 不依赖于 libgdiplus,因此您不会遇到此类问题。我们有一个完全托管的绘图引擎,这意味着我们不依赖于原生图形库。您将不再遇到无法理解的平台错误和程序的不可预知行为。

相同的渲染结果

使用 Aspose.Drawing 的另一个好处是在所有支持的平台上呈现相同的渲染结果。如果您在 .NET Core 中使用 System.Drawing.Common,您的渲染结果在 Windows 和 Linux 上可能看起来不同,请参见下面的示例。

Linux 和 Windows 上的 System.Drawing

使用 Aspose.Drawing,您可以为 Windows、Linux 或 Android 创建跨平台的图形应用程序,并且您将始终在每个平台上获得相同的渲染结果。这是通过创建独立于平台的 2D 渲染引擎而不是依赖于第 3 方图形库来实现的。

除了图形基元,字体渲染在所有平台上都是相同的。即使 Linux 上的系统字体与 Windows 不同,您也可以使用 PrivateFontCollection 来加载您自己的字体集。另一种方法是在Linux系统中安装一套微软字体,并照常调用文本渲染函数。

免费试用 Aspose.Drawing

Aspose.Drawing 在 NuGet 上可用。您还可以 下载 二进制文件或 MSI 安装程序。您可以使用有限制的 Aspose.Drawing 库或申请 免费试用许可证

那么今天为什么不试试呢?

结论

在本文中,您已经看到在所有平台上使用 System.Drawing 没有任何依赖关系并获得相同的结果是多么容易。您可以在官方 page 上了解有关 Aspose.Drawing 的更多信息。如有任何问题,请使用 论坛 并继续关注未来的帖子和指南。

也可以看看