ImageMagick 中 GhostScript 的文件路径
Posted
技术标签:
【中文标题】ImageMagick 中 GhostScript 的文件路径【英文标题】:GhostScript's file path in ImageMagick 【发布时间】:2012-11-09 08:54:47 【问题描述】:我正在尝试在 PC 和 OSX 上使用 ImageMagick 将 PDF 转换为 PNG——但实际上我无法在将使用我的软件的任何计算机上安装 GhostScript。
有没有办法将 GhostScript 与 ImageMagick 捆绑在一起,只需将 ImageMagick 的路径重定向到该包,这样我就可以使用它而无需在用户的计算机上正式“安装”它?
I found this page,但我不明白如何更改 ImageMagick 中的 delegates.xml 文件以使其正常工作。我认为我必须更改此行的某些部分:
<delegate decode="pdf" encode="eps" mode="bi" command=""@PSDelegate@" -q -dQUIET -dPARANOIDSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dEPSCrop -sDEVICE=epswrite "-sOutputFile=%o" -- "%i"" />
但我不确定该怎么做——将路径放在哪里,或者路径应该基于什么——ImageMagick 的位置,还是其他什么?任何帮助将不胜感激。
更新 v1.2:我尝试将上面的委托更改为以下,在命令行中使用可执行文件:
<delegate decode="pdf" encode="eps" mode="bi" command=""F:\ImageMagickTest\ImageMagick\gs\bin\gswin32c.exe" -q -dQUIET -dPARANOIDSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dEPSCrop -sDEVICE=epswrite "-sOutputFile=%o" -- "%i""/>
但是当我运行程序时,在 cmd 提示符中出现以下错误:
Microsoft Windows XP [Version 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
F:\Documents and Settings\Administrator>F:\ImageMagickTest\ImageMagick\convert.e
xe F:\ImageMagickTest\PDFs\Appointment.pdf F:\ImageMagickTest\ConvertedPDFs\Appo
intment.png
convert.exe: `%s' (%d) "F:/ImageMagickTest/ImageMagick/gs9.06/bin/gswin32c.exe"
-q -dQUIET -dPARANOIDSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -d
EPSCrop -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pngalpha" -dTextAlphaBits=4 -d
GraphicsAlphaBits=4 "-r72x72" "-sOutputFile=F:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/
magick-5996ZNQmVN7RFumY--0000001" "-fF:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/magick-5
996r7pmg8XgvrNB" "-fF:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/magick-5996yhTQgwoLswnn"
@ error/utility.c/SystemCommand/1890.
convert.exe: Postscript delegate failed `F:\ImageMagickTest\PDFs\Appointment.pdf
': No such file or directory @ error/pdf.c/ReadPDFImage/679.
convert.exe: no images defined `F:\ImageMagickTest\ConvertedPDFs\Appointment.png
' @ error/convert.c/ConvertImageCommand/3044.
对我来说,这似乎表明它没有找到文件“Appointment.pdf”。但它就在那里。我不明白什么?
为了好玩,这里是gs的完整路径,取自windows explorer:
F:\ImageMagickTest\ImageMagick\gs\bin\gswin32c.exe
为了更有趣,这里是从 Unity 3D 应用程序中调用它的 c# 脚本(我没有收到任何错误):
string currDir = System.Environment.CurrentDirectory;
string convertPath = currDir + @"\ImageMagick\convert.exe";
string convertedDir = currDir + @"\ConvertedPDFs\";
string pdfFolder = currDir + @"\PDFs\";
string fileName = "Appointment";
string argumentForImageMagick;
argumentForImageMagick = pdfFolder + fileName + ".pdf" + " " + convertedDir + fileName + ".png";
ProcessStartInfo info = new ProcessStartInfo Arguments = argumentForImageMagick , FileName = convertPath;
System.Diagnostics.Process.Start(info).WaitForInputIdle();
【问题讨论】:
您的更新显示您没有将 Ghostscript 可执行文件放入命令行,而仅将其放入了它应该位于的目录:.....\bin`. On Windows, the executable you're looking for is named
gswin32c.exe` 或 gswin64c.exe
。
好的,很酷,我已将可执行文件添加到末尾,但仍然没有任何变化。我已经用新的错误更新了我原来的问题——据我所知,大部分都是一样的。
再次感谢您提供的帮助。没有你就无法做到。
删除将路径括起来的两个 @
字符。当您提供可执行文件的完整路径时,它不再是一个变量(就像@PSDeletage@
的情况一样)。它应该是 ... command="&quot;F:\ImageMagickTest\ImageMagick\gs\bin\gswin32c.exe&quot; ...
-- 另外,您肯定已经检查过这确实 IS 您的 Ghostscript 可执行文件?!
嘿,库尔特!谢谢你回到我身旁。我很肯定它是我的可执行文件——至少,这就是它在 Windows 资源管理器中显示的位置——路径似乎是 F:\ImageMagickTest\ImageMagick\gs\bin\gswin32c.exe ...我尝试过切换代表线路,但没有运气。我也更新了在 cmd 行中收到的错误。这似乎是一个类似的错误——我希望我知道它的含义。我希望我对 xml 有更多的了解!所以你认为它肯定没有找到.exe?
【参考方案1】:
尝试将该行的""@PSDelegate" -q
部分替换为"/usr/local/bin/gs -q
(或您要将Ghostscript 可执行文件安装到的任何路径)。
根据您的环境,您可能需要向该命令行/行添加额外的参数,以告知 gs
(在 Windows 上:gswin32c.exe
或 gswin64c.exe
)在哪里可以找到其库:@987654326 @
更新:尝试直接在 cmd.exe 窗口中运行此 Ghostscript 命令,以查看它是否有效(或产生哪些错误):
"F:/ImageMagickTest/ImageMagick/gs9.06/bin/gswin32c.exe" \
-o F:/ImageMagickTest/PDFs/test.png \
-dEPSCrop \
-dAlignToPixels=0 \
-dGridFitTT=2 \
-sDEVICE=pngalpha \
-dTextAlphaBits=4 \
-dGraphicsAlphaBits=4 \
-r72 \
F:/ImageMagickTest/PDFs/Appointment.pdf
不用担心我使用正斜杠 ('/') 作为目录分隔符 -- Windows 上的 Ghostscript 可以很好地处理这些。
我希望您的 Ghostscript 安装是最新版本(否则它将无法理解输出文件的 -o
语法)。
如果此命令不起作用,您应该会在窗口中看到某种错误消息(因为我跳过了 -q -dQUIET
参数)。
可能 Ghostscript 找不到它的库,因为您可能只复制了 .exe 文件,而没有正确安装完整的包。
也许您需要添加 -I"F:/ImageMagickTest/ImageMagick/gs9.06/lib"
或类似于命令行的内容(我不知道您的 Ghostscript /lib
目录是否真的位于 - 这只是一个猜测!):
"F:/ImageMagickTest/ImageMagick/gs9.06/bin/gswin32c.exe" \
-o F:/ImageMagickTest/PDFs/test.png \
-I"F:/ImageMagickTest/ImageMagick/gs9.06/lib" \
-dEPSCrop \
-dAlignToPixels=0 \
-dGridFitTT=2 \
-sDEVICE=pngalpha \
-dTextAlphaBits=4 \
-dGraphicsAlphaBits=4 \
-r72 \
F:/ImageMagickTest/PDFs/Appointment.pdf
只有在 cmd.exe 窗口中直接运行 Ghostscript 成功后,才能继续修改 delegates.xml 中的行。
【讨论】:
库尔特!感谢您的帮助。我正在尝试按照您的说明更改 xml 行...但我不确定我是否正确确定了路径。我已经更新了问题以反映它...【参考方案2】:尝试在没有管理权限的计算机上使用 ImageMagick 和 GhostScript(使用两者的便携版本)时,我遇到了同样的问题。尝试在 delegates.xml 中手动设置 GhostScript 的路径时出错,尝试将隐藏的 PDF 文件批量转换为 TIFF。
我发现的解决方案是用完整路径替换"@PSDelegate"
的所有实例,例如:delegates.xml 文件中的&quot;C:\<path_to_exec>\gswin32c.exe&quot;
,而不仅仅是PDF 特定行。在这之后它工作得很好。
这可能是因为 GhostScript 也用于其他格式,并且在转换 PDF 文件时可能依赖于 delegates.xml 文件中的其他 "@PSDelegate"
实例。
【讨论】:
【参考方案3】:在运行 ImageMagick 进行 PDF 阅读时,我也收到了 Postscript delegate failed
消息。问题是由于 ImageMagick 读取以下注册表项之一(在 SOFTAWRE 下)以获取 Windows 上 gs 可执行文件的路径。
问题是这指向了一个非常旧版本的 Ghost 脚本,安装在用户的机器上,并且无法将 PDF 转换为图像。
解决方案是从机器上卸载有问题的古老软件包,或更新 delegates.xml 文件以明确指向随附的 gs 可执行文件。
【讨论】:
【参考方案4】:我遇到了同样的问题,但没有一个答案有帮助。事实证明,安装了 32 位版本的 ImageMagick 和 64 位版本的 GhostScript,但播放效果不佳。所以我们删除了 64 位 GhostScript 并安装了一个 32 位版本,在取消了 delegates.xml 中的路径后它工作正常
【讨论】:
【参考方案5】:就我而言,这是 Windows 10 上的问题。
我尝试了不同的选项,但 ImageMagick 总是尝试使用 gs.exe。所以我做了一些我认为行不通的事情,基本上将我的 gswin64c.exe 文件重命名为 gc.exe。
然后它就起作用了。我唯一需要做的就是将路径添加到 exe 所在的环境变量中,在我的例子中是:C:\Program Files\gs\gs9.53.3\bin
。
【讨论】:
以上是关于ImageMagick 中 GhostScript 的文件路径的主要内容,如果未能解决你的问题,请参考以下文章
Imagemagick将pptx转换为jpg在ghostscript调用中失败
将 ImageMagick 和 GhostScript 与 nuget 一起使用
ImageMagick PDF 委托失败,GhostScript 丢失
奇怪的问题——PHP / ImageMagick / Ghostscript