使用GraphicsMagick 1.3.36转换PDF文件时出现"No decode delegate for this image format (input.pdf)"错误的原因排查求助
我来帮你排查这个问题——你已经装了GhostScript但GraphicsMagick还是不认PDF,大概率是GraphicsMagick没正确关联到GhostScript的解码委托,毕竟PDF的解码完全依赖GhostScript,而GraphicsMagick和ImageMagick的配置逻辑还有点不一样。下面分几种情况给你分析解决:
1. 先检查GhostScript是否在系统PATH里
GraphicsMagick不像ImageMagick那样可能自动扫描GhostScript路径,它需要GhostScript的可执行文件能被系统直接调用:
- 打开命令提示符(cmd),输入
gswin64c --version(如果是32位系统就输gswin32c --version),回车看看能不能正常输出GhostScript的版本信息。 - 如果提示“不是内部或外部命令”,就把GhostScript安装目录下的
bin文件夹(比如C:\Program Files\gs\gs9.55.0\bin)添加到系统环境变量PATH里,然后重启cmd再试。
2. 确认GraphicsMagick支持PDF解码委托
有些精简版的GraphicsMagick预编译包可能没默认包含PDF支持,你可以先验证一下:
- 运行命令:
gm.exe convert -list delegate - 在输出结果里找有没有和PDF相关的条目,比如类似这样的行:
"pdf" => "gswin64c.exe -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pngalpha" -dTextAlphaBits=4 -dGraphicsAlphaBits=4 "-r%s" %s "-sOutputFile=%s" -f %s -f %s"
- 如果完全找不到PDF相关的委托,说明你用的GraphicsMagick版本没包含PDF支持,得重新下载完整带GhostScript依赖的版本,或者自己编译时指定GhostScript的路径。
3. 调整命令参数顺序
你当前的命令参数顺序可能有问题——-density是控制输入PDF的解析密度的,应该放在输入文件前面,就像你用magick.exe时的写法一样:
把原来的命令:
gm.exe convert "input.pdf" -density 168X168 -quality 76 -compress JPEG "output.jpeg"
改成:
gm.exe convert -density 168x168 "input.pdf" -quality 76 -compress JPEG "output.jpeg"
虽然这不一定是报错的直接原因,但参数顺序错误也可能引发异常,先调整试试。
4. 检查32位/64位版本是否匹配
如果你的GraphicsMagick是32位,而GhostScript装的是64位(或者反过来),会导致GraphicsMagick无法加载GhostScript的解码库,出现委托缺失的错误:
- 确认两者的位数一致:比如都装64位版本,然后重启系统让环境变量生效。
先从PATH和版本匹配这两点入手排查,这是最常见的原因,一般就能解决问题了。
内容的提问来源于stack exchange,提问作者Shivam Agrawal

