Skip to content
MagickCmd报错 › no images defined / FailedToExecuteCommand 'gs'

no images defined / FailedToExecuteCommand 'gs'

ImageMagick 没有 Ghostscript 就读不了 PDF 和 EPS。如何确认是这个原因,在 Linux、macOS 和 Windows 上安装,以及验证是否生效。

你转 PDF 或 EPS 时遇到下面之一:

convert: no images defined 'output.png' @ error/convert.c/ConvertImageCommand/3234
convert: FailedToExecuteCommand 'gs' -sstdout=%stderr ... @ error/pdf.c/InvokePDFDelegate/292

这是什么意思

ImageMagick 自己解不了 PDF 和 PostScript,它是去调用外部的 Ghostscript 程序 gs。这个程序不存在时,Ghostscript 根本没被调起来,ImageMagick 读入了零张图,然后抱怨没东西可写 —— 所以报错信息说的是输出文件,而不是输入。

「no images defined」这个措辞把很多人引到了错误的方向。问题在输入,不在输出。

确认一下

which gs
gs --version

如果没有输出,那这页就是你要的答案。如果 Ghostscript 确实装了,那你的问题几乎肯定是PDF 安全策略

安装

apt install ghostscript        # Debian / Ubuntu
dnf install ghostscript        # Fedora / RHEL
apk add ghostscript            # Alpine
brew install ghostscript       # macOS
pacman -S ghostscript          # Arch

Windows 用户到 ghostscript.com 下载安装包,并确认它的 bin 目录加进了 PATH。ImageMagick 的 Windows 安装程序会把 Ghostscript 作为可选组件提供 —— 很容易顺手点过去。

验证委托是否注册成功

magick -list delegate | grep -i ps

应该能看到 epspspdf 映射到 gs 的条目。然后测试:

magick -density 150 input.pdf page.png
identify page.png

装了还是不行

  1. 检查策略。 装 Ghostscript 并不会解除 policy.xml 的封锁 —— 这是两道独立的门,你可能要依次撞两次。见策略那一页
  2. 重开终端。 Windows 安装程序改的 PATH 需要新开一个终端才生效。
  3. 检查 PDF 有没有加密。 Ghostscript 会拒绝有密码的文件。只有所有者密码、没有用户密码的简单情况可以用 qpdf --decrypt in.pdf out.pdf 处理。
  4. 检查文件真的是 PDF。 file input.pdf —— 下载下来被改了扩展名的情况出乎意料地常见。

在 Docker 里

精简基础镜像几乎从不包含 Ghostscript:

RUN apt-get update \
 && apt-get install -y --no-install-recommends imagemagick ghostscript \
 && rm -rf /var/lib/apt/lists/*

另一个选择

如果你只需要把 PDF 光栅化,poppler 更轻,也没有 Ghostscript 那段历史:

apt install poppler-utils
pdftoppm -png -r 300 input.pdf page

相关页面

Copied