25 February 2011

(Linux) GhostscriptとImageMagickを用いてFAX用ディザ2値画像を作る

Linuxのefaxの標準処理方法は、Ghostscriptを使ってディザ2値画像を作成しているが、そのディザがあまりにも酷すぎる…

そこで、一旦jpegファイルに書きだしてからImageMagickでディザ2値化する方法を試してみた。アンチエイリアスのON/OFFやガンマ補正の度合いで何種類か試した結果を掲載する。

なお、ここで作成したtiffファイルは、なぜかefax送信時にエラーとなる。
まわりくどい方法だが、作成したtiffファイルをPDFに戻して、通常のfax送信手順を踏んで再度tiffを作れば問題なく送信できる。

convert 作成したtiff.tif temp.pdf pdftops temp.pdf fax make temp.ps fax send "+01-123-4567" temp.ps.001

■ 検証環境
・Ubuntu 10.04
・G3 FAX用2値画像 (A4用紙 204x196 dpi)

■ efaxの標準的方法での出力画像
/usr/bin/fax スクリプトで指定されているデフォルトの処理方法は

gs -sDEVICE=tiffg3 -r204x196 -dNOPAUSE -dSAFER -dMaxStripSize=0 \ -sOutputFile=output.tif -sPAPERSIZE=a4 input.ps

20110225-efax-default.png

■ PDF → アンチエイリアス化JPEG → 2値TIFF (ガンマ0.2)

gs -sDEVICE=jpeg -r204x196 -sPAPERSIZE=a4 \ -dNOTRANSPARENCY -dNOPAUSE -dBATCH -dTextAlphaBits=4 \ -dGraphicsAlphaBits=4 -sOutputFile=output.jpg input.pdf

20110225-jpeg-antialias.jpg
PDF → JPEG (アンチエイリアス=ON)

convert output.jpg -gamma 0.2 -monochrome -despeckle \ -density 204x196 -type Bilevel -format fax output.tif

20110225-tiff20-antialias.png
ガンマ0.2で2値化

■ PDF → アンチエイリアス化JPEG → 2値TIFF (ガンマ1.0=OFF)

convert output.jpg -monochrome -despeckle \ -density 204x196 -type Bilevel -format fax output.tif

20110225-tiff100-antialias.png
ガンマ1.0で2値化

■ PDF → アンチエイリアス化しないJPEG → 2値TIFF (ガンマ0.2)

gs -sDEVICE=jpeg -r204x196 -sPAPERSIZE=a4 \ -dNOPAUSE -dBATCH -sOutputFile=output.jpg input.pdf

20110225-jpeg-noantialias.jpg
PDF → JPEG (アンチエイリアス=OFF)

convert output.jpg -gamma 0.2 -monochrome -despeckle \ -density 204x196 -type Bilevel -format fax output.tif

20110225-tiff20-noantialias.png
ガンマ0.2で2値化

■ PDF → アンチエイリアス化しないJPEG → 2値TIFF (ガンマ1.0=OFF)

convert output.jpg -monochrome -despeckle \ -density 204x196 -type Bilevel -format fax output.tif

20110225-tiff100-noantialias.png
ガンマ1.0で2値化

■ 参考資料
Producing a good FAX image (using Ghostscript and ImageMagick)

航空図(チャート)は公開資料を使っている
Netherlands TRA's