簡體   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