Skip to content

图像处理

一些 内置插件 依赖于外部库以实现高效的图像处理,最显著的是 社交 插件用于生成 社交卡片,以及 优化 插件用于应用 图像优化。本指南解释了如何在不同环境中安装这些库。

依赖关系

图像处理库是完全可选的,仅在您希望使用 社交 插件或 优化 插件时需要安装。库在 imaging 附加项下列出:

pip install "mkdocs-material[imaging]"

这将安装以下软件包的兼容版本:

Cairo 图形

Cairo 图形 是一个图形库,也是 Pillow 的依赖项,Material for MkDocs 使用它生成 社交卡片 和执行 图像优化。请参阅以下部分,了解如何在您的系统上安装 Cairo 图形 及其依赖项:

确保安装了 Homebrew,这是 macOS 的现代包管理器。接下来,使用以下命令安装所有必要的依赖项:

brew install cairo freetype libffi libjpeg libpng zlib

在 Windows 上,获取 Cairo 图形 库的最简单方法是通过 MSYS2 安装,它是一个软件分发和构建平台。在 MSYS2 shell 中运行以下命令:

pacman -S mingw-w64-ucrt-x86_64-cairo

MSYS2 在几种不同的环境中提供 Cairo 图形库。上述命令使用 UCRT64 环境,这是 MSYS2 开发者推荐的。

Linux 有几种包管理器,具体可用性因发行版而异。 安装指南 解释了如何为您的发行版安装 Cairo 图形 库:

apt-get install libcairo2-dev libfreetype6-dev libffi-dev libjpeg-dev libpng-dev libz-dev
yum install cairo-devel freetype-devel libffi-devel libjpeg-devel libpng-devel zlib-devel
zypper install cairo-devel freetype-devel libffi-devel libjpeg-devel libpng-devel zlib-devel

以下环境预装了 Cairo 图形 的版本:

pngquant

pngquant 是一个优秀的有损 PNG 压缩库,是 内置优化插件 的直接依赖。请参阅以下部分,了解如何安装 pngquant 系统:

确保安装了 Homebrew,这是 macOS 的现代包管理器。接下来,使用以下命令安装所有必要的依赖项:

brew install pngquant

获取 pngquant 的最简单方法是通过 MSYS2 安装。在 MSYS2 shell 中运行以下命令:

pacman -S mingw-w64-ucrt-x86_64-pngquant

所有流行的 Linux 发行版,无论包管理器如何,都应该允许使用捆绑的包管理器安装 pngquant。例如,在 Ubuntu 上,可以使用以下命令安装 pngquant

apt-get install pngquant

对于 yumzypper 也是如此。

以下环境预装了 pngquant 的版本:

故障排除

找不到 Cairo 库

在按照上述安装指南后,您可能仍会遇到以下错误:

no library called "cairo-2" was found
no library called "cairo" was found
no library called "libcairo-2" was found
cannot load library 'libcairo.so.2': error 0x7e.  Additionally, ctypes.util.find_library() did not manage to locate a library called 'libcairo.so.2'
cannot load library 'libcairo.2.dylib': error 0x7e.  Additionally, ctypes.util.find_library() did not manage to locate a library called 'libcairo.2.dylib'
cannot load library 'libcairo-2.dll': error 0x7e.  Additionally, ctypes.util.find_library() did not manage to locate a library called 'libcairo-2.dll'

这意味着 cairosvg 包已安装,但底层的 cairocffi 依赖项无法 找到 已安装的库。根据操作系统,库查找过程有所不同:

Note

在继续之前,请记得完全重启任何打开的终端窗口及其父主机(如 IDE),以重新加载在安装过程中更改的任何环境变量。这可能是快速修复。

在 macOS 上,库查找会检查 dyld 中定义的路径。此外,每个库的 name 会以 三种变体 检查,格式为 libname.dylibname.dylibname.framework/name

Homebrew 应该设置每个所需变量以指向已安装的库目录,但如果没有发生,您可以使用下面的调试脚本查看查找的路径。

一个 已知的解决方法 是在运行 MkDocs 之前直接添加 Homebrew lib 路径:

export DYLD_FALLBACK_LIBRARY_PATH=/opt/homebrew/lib

查看 cairo-lookup-macos.py 的源代码

Python Debug macOS Script
curl "https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/includes/debug/cairo-lookup-macos.py" | python -

在 Windows 上,库查找会检查环境 PATH 变量中定义的路径。此外,每个库的 name 会以 两种变体 检查,格式为 namename.dll

UCRT64 环境的默认二进制和共享库路径是:

C:\msys64\ucrt64\bin

使用下面的调试脚本检查路径是否包含。如果没有,则:

  1. Win+R
  2. 运行 SystemPropertiesAdvanced 小程序。
  3. 在底部选择“环境变量”。
  4. 将上述目录的整个路径添加到您的 Path 变量中。
  5. 点击所有打开窗口上的 OK 以应用更改。
  6. 完全重启任何打开的终端窗口及其父主机(如 IDE)。
您也可以使用 PowerShell 列出路径
$env:Path -split ';'

查看 cairo-lookup-windows.py 的源代码

PowerShell - Python Debug Windows Script
(Invoke-WebRequest "https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/includes/debug/cairo-lookup-windows.py").Content | python -

在 Linux 上,库查找可能 差异很大,并且依赖于已安装的发行版。对于经过测试的 Ubuntu 和 Manjaro 系统,Python 运行 shell 命令以检查 ldconfiggcc/cc 编译器和 ld 中可用的库。

您可以使用包含 libcairo.so 等的库目录的绝对路径扩展 LD_LIBRARY_PATH 环境变量。在运行 MkDocs 之前直接运行此命令:

export LD_LIBRARY_PATH=/absolute/path/to/lib:$LD_LIBRARY_PATH

您还可以修改 /etc/ld.so.conf 文件。

下面的 Python 脚本显示了用于查找已安装库的函数。您可以查看源代码以了解在库查找期间在您的系统上执行了哪些特定命令。

查看 cairo-lookup-linux.py 的源代码

Python Debug Linux Script
curl "https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/includes/debug/cairo-lookup-linux.py" | python -