Xml 鬼脚本';ImageMagick中的文件路径
我试图在PC和OSX上使用ImageMagick将PDF转换为PNG,但实际上我无法在任何使用我的软件的计算机上安装GhostScript 有没有办法将GhostScript与ImageMagick捆绑在一起,并将ImageMagick的路径重定向到该包,这样我就可以使用它,而无需在用户的计算机上正式“安装”它 ,但我无法理解如何更改ImageMagick中的delegates.xml文件以使其正常工作。我想我必须改变这一行的某些部分:Xml 鬼脚本';ImageMagick中的文件路径,xml,windows,macos,imagemagick,ghostscript,Xml,Windows,Macos,Imagemagick,Ghostscript,我试图在PC和OSX上使用ImageMagick将PDF转换为PNG,但实际上我无法在任何使用我的软件的计算机上安装GhostScript 有没有办法将GhostScript与ImageMagick捆绑在一起,并将ImageMagick的路径重定向到该包,这样我就可以使用它,而无需在用户的计算机上正式“安装”它 ,但我无法理解如何更改ImageMagick中的delegates.xml文件以使其正常工作。我想我必须改变这一行的某些部分: <delegate decode="pdf" e
<delegate decode="pdf" encode="eps" mode="bi" command=""@PSDelegate@" -q -dQUIET -dPARANOIDSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dEPSCrop -sDEVICE=epswrite "-sOutputFile=%o" -- "%i"" />
(C) 版权所有1985-2001微软公司
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资源管理器:
F:\ImageMagickTest\ImageMagick\gs\bin\gswin32c.exe
更有趣的是,下面是从Unity 3D应用程序中调用它的c#脚本(我没有收到错误):
尝试将该行的“@PSDelegate”-q
部分替换为”/usr/local/bin/gs-q
(或您要将Ghostscript可执行文件安装到的任何路径)
根据您的环境,您可能需要在命令/行中添加额外的参数,这些参数告诉gs
(在Windows上:gswin32c.exe
或gswin64c.exe
)在哪里可以找到它的库:-I/usr/local/share/ghostscript/9.06/lib/
更新:尝试直接在cmd.exe窗口中运行此Ghostscript命令,查看其是否有效(或产生了哪些错误): 不要担心我使用正斜杠(“/”)作为目录分隔符——Windows上的Ghostscript可以很好地处理这些问题 我希望您的Ghostscript安装是最新版本(否则它将无法理解输出文件的
-o
语法)
如果这个命令不起作用,您应该会在窗口中看到某种错误消息(因为我跳过了-q-dQUIET
参数)
可能Ghostscript找不到它的库,因为您可能只复制了.exe文件,而没有正确安装完整的软件包
也许您需要添加-I“F:/ImageMagickTest/ImageMagick/gs9.06/lib“
或类似于命令行的内容(我不知道您的Ghostscript/lib
目录是否真的位于其中--这只是猜测!):
只有在成功直接在cmd.exe窗口中运行Ghostscript后,才能继续修改delegates.xml中的行。在没有管理权限的计算机上尝试使用ImageMagick和Ghostscript时,我遇到了同样的问题(使用这两个的可移植版本)。尝试在delegates.xml中手动设置GhostScript的路径时出错,尝试将PDF文件批转换为TIFF 我找到的解决方案是用完整路径替换
“@PSDelegate”
的所有实例,例如:delegates.xml文件中的“C:\\gswin32c.exe”
,而不仅仅是PDF特定行。在这之后,它工作得很好
这可能是因为GhostScript也用于其他格式,并且在转换PDF文件时可能依赖于delegates.xml文件中的其他
“@PSDelegate”
实例。在运行ImageMagick进行PDF读取时,我还收到了Postscript delegate failed
消息。问题是由ImageMagick读取以下注册表项之一(在SOFTAWRE下)以获取Windows上gs可执行文件的路径引起的
- GPL鬼脚本
- GNU鬼脚本
- AFPL鬼脚本
- 阿拉丁鬼书
解决方案是从机器上卸载有问题的古代软件包,或者更新delegates.xml文件以显式指向附带的gs可执行文件。我也遇到了同样的问题,但没有一个答案有帮助。原来安装了32位版本的ImageMagick和64位版本的GhostScript,但效果不好。因此,我们删除了64位的GhostScript并安装了一个32位版本,在对delegates.xml中的路径进行了日期标注后,它运行良好。在我的例子中,这在Windows 10上是一个问题 我尝试了不同的选项,但ImageMagick始终尝试使用gs.exe。因此,我做了一些我认为不起作用的事情,并将我的gswin64c.exe文件重命名为gc.exe
在那之后,它就起作用了。我唯一需要的是将路径添加到exe所在的环境变量中,在我的例子中是:
C:\Program Files\gs\gs9.53.3\bin
Kurt!谢谢你的帮助。我正试图按照您的指示更改xml行……但我不确定是否正确确定了路径。我已经更新了这个问题以反映它……您的更新显示您没有将Ghostscript可执行文件放入命令行,而只是将其假定位于的目录:…\bin`。在Windows上,您要查找的可执行文件名为
gswin32c.exe`或gswin64c.exe。好的,很酷,我已将可执行文件添加到末尾,但仍然没有更改。我已经用新的错误更新了我原来的问题——据我所知,基本上是一样的。顺便说一句,再次感谢你帮了我这么大的忙。如果没有您,则无法执行此操作。请删除包含路径的两个@
字符。当您给出可执行文件的完整路径时,它不再是一个变量(就像@PSDeletage@
一样)。它应该是。。。command=”“F:\ImageMagickTest\ImageMagick\gs\bin\gswin32c.exe”…
--另外,您肯定已经检查过这确实是您的Ghostscript可执行文件?!嘿,库尔特!谢谢您回复我。我肯定这是我的可执行文件--至少,它在windows中显示了自己
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.
F:\ImageMagickTest\ImageMagick\gs\bin\gswin32c.exe
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();
"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
"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