繁体   English   中英

如何使用ImageMagick通过文件夹操作将PostScript文件批量转换为PNG

[英]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文件夹操作的设置和设置

Automator屏幕截图

我遇到两个问题:

  • 当我将* .ps文件放到文件夹中时,Automator操作将启动,但不会产生文件。 我猜测问题出在与不将文件名传递给Shell脚本有关,但是我找不到解决方案。
  • 当我尝试使用以下命令直接从终端执行转换: convert b.ps b.pngconvert 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后缀...

更新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出一定的余量。将-g940x760与Ghostscript一起使用,将其设置为页面大小):

inputfilename=a.ps

gs                             \
  -o ${inputfilename/.ps/.png} \
  -sDEVICE=pngalpha            \
  -dAlignToPixels=0            \
  -dGridFitTT=2                \
  -dTextAlphaBits=4            \
  -dGraphicsAlphaBits=4        \
  -g940x760                    \
   ${inputfilename}

输出在这里:

通过PS输入创建的940x760像素PNG

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM