(您应该在问题中清楚地说明您正在使用 Mac OSX。)
在转换 PS 文件时,您可能在 ImageMagick 中遇到了错误(另请参阅 IM 论坛中的 this discussion)。尝试将-verbose 添加到您的convert 命令中,看看到底发生了什么。
事实是,ImageMagick 本身不能使用 PostScript(或 PDF)输入。它必须雇佣一个委托来为你做这件事——而这个委托通常是 Ghostscript。
如果你让你的 shell 脚本区分不同的输入类型,这对你的任务来说是一个更好的方法:如果你得到 PS 或 PDF,让 Ghostscript 直接完成这项工作:
gs \
-o output.png \
-sDEVICE=pngalpha \
-dAlignToPixels=0 \
-dGridFitTT=2 \
-dTextAlphaBits=4 \
-dGraphicsAlphaBits=4 \
-r72x72 \
input.ps-or-pdf
如果您需要对生成的output.png 进行进一步后处理(例如制作背景white 而不是transparent,您现在可以将输出通过管道传送到ImageMagick convert-command....
更新
因为它在评论中被问到:如果您想使用相同的文件名进行输出,但将 .ps 后缀替换为 .png 后缀,请使用此 Bashism:
inputfilename=../somedir/somefile.ps
gs \
-o ${inputfilename/.ps/.png} \
-sDEVICE=pngalpha \
-dAlignToPixels=0 \
-dGridFitTT=2 \
-dTextAlphaBits=4 \
-dGraphicsAlphaBits=4 \
-r72x72 \
${inputfilename}
或者这个
-o $(dirname ${inputfilename})/$(basename ${inputfilename}).png
两者都允许您保留原始目录(如果您的“输入文件名”包含绝对或相对路径)。第一个对输入文件的后缀没有那么灵活:它只适用于.ps——对于PDF,你会得到一个.pdf.png 后缀...
更新 2
首先确定原始 PostScript 覆盖的真实BoundingBox。这与 已声明 BoundingBox 不同,后者可能(也可能不会!)在 PostScript 代码的 %%BoundingBox 行中声明。 Ghostscript 的-sDEVICE=bbox 会为您做到这一点:
gs -q -o - -sDEVICE=bbox a.ps
%%BoundingBox: 102 118 866 698
%%HiResBoundingBox: 102.257997 118.502434 865.278747 697.013979
现在您可以使用此信息来确定您希望调整 PNG 输出文件大小的水平像素数和垂直像素数。我将选择 940 像素宽和 760 像素高(以在输出周围留出一些边距。使用 -g940x760 和 Ghostscript 将其设置为页面大小:
inputfilename=a.ps
gs \
-o ${inputfilename/.ps/.png} \
-sDEVICE=pngalpha \
-dAlignToPixels=0 \
-dGridFitTT=2 \
-dTextAlphaBits=4 \
-dGraphicsAlphaBits=4 \
-g940x760 \
${inputfilename}
输出在这里: