![](/img/trans.png)
[英]Batch convert PNGs to individual PDFs while maintaining deep folder hierarchy in bash
[英]How to batch convert PostScript files to PNGs via folder action with use of ImageMagick
我正在尝试将文件夹操作分配给包含PS文件的文件夹,该操作会将文件夹中放置的PS文件自动转换为PNG文件。 我的shell脚本如下所示:
for img in "$@"; do
filename = ${img%.*}
convert "$img" -background white -flatten "$filename.png"
done
下面的屏幕快照中提供了Automator文件夹操作的设置和设置
我遇到两个问题:
convert b.ps b.png
, convert b.ps b.png
生成的图像,如下面的屏幕截图所示 我想解决这个问题,以便执行Automator操作:-接收我决定通过“ 过滤器查找器项”选项指定的所有文件-将它们转换为符合原始PS文件大小的高分辨率,高质量PNG(无需切割或提供额外的边距)
(您应该在问题中明确说明您正在使用Mac OSX。)
转换PS文件时,您可能在ImageMagick中遇到了一个错误(另请参阅IM论坛中的相关讨论 )。 尝试在您的convert
命令中添加-verbose
,以查看发生了什么。
事实是,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
后缀...
首先确定哪个是原始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
出一定的余量。将-g940x760
与Ghostscript一起使用,将其设置为页面大小):
inputfilename=a.ps
gs \
-o ${inputfilename/.ps/.png} \
-sDEVICE=pngalpha \
-dAlignToPixels=0 \
-dGridFitTT=2 \
-dTextAlphaBits=4 \
-dGraphicsAlphaBits=4 \
-g940x760 \
${inputfilename}
输出在这里:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.