![](/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.