Ghostscript でラスタライズ(#1:Ps / Ai と比較)

2022年5月28日

Ghostscript を使用して、PDF のベクトルデータをラスタライズして画像データを作成する実験をしてみます。 ラスタライズした結果を、Illustrator や Photoshop でラスタライズしたものと比べてみて、ラスタライザーとして使用に耐えうるのかどうかを調べるのを目的とします。 まず今回は RGB モードで作成された PDF データを、RGB の画像データに変換してみます。 サンプルとして使用する PDF はこちらになります。 logo-ghost.ai.preview

1. Photoshop でラスタライズ

PDFファイルを Photoshop で開くと、次のように PDFの読み込み の設定画面が表示されます。 RasterizeMenu-ps ここでは、アンチエイリアスは無し&解像度 150ppi と指定してラスタライズします。 同様に 解像度が 72ppi や 300ppi でもラスタライズしてみて、次のような結果が得られました。
72ppi72ppi
150ppi150ppi
300ppi300ppi
当然ながら、解像度に比例して画像のピクセル数が大きくなることと、アンチエイリアス無しなので、曲線のエッジがガタガタになってることが分かります。

2. Illustrator でラスタライズ

PDFファイルを Illustrator で開いて、メニューから[オブジェクト]⇒[ラスタライズ…]を実行すると、次のように ラスタライズ の設定画面が表示されます。 RasterizeMenu-ai ここでも Photoshop のときと同様に、アンチエイリアス無しにしておきます。 そして解像度 72ppi、150ppi、300ppi でラスタライズした結果が次のようになります。
72ppilogo-ghost.rasterize-72-ai
150ppilogo-ghost.rasterize-150-ai
300ppilogo-ghost.rasterize-300-ai
同じ Adobe の製品なのでまったく同じ結果になると予想してたのですが、よく見ると微妙に違う所があります。しかし、アンチエイリアス有りに設定すればこれらの違いは目立たなくなりますので、実害はなさそうです。

3. Ghostscript でラスタライズ

さて、本題です。 Ghostscript でラスタライズする場合、出力画像の形式は BMP、JPEG、PNG、TIFF、PSD などがありますが、今回は PNG 形式で出力してみます。 入力PDFデータのファイル名を in.pdf、ラスタライズの解像度を 150ppi にして出力データのファイル名を out.png とする場合は、
$ gs -dSAFER -sDEVICE=png16m -r150 -o out.png in.pdf
とします。 gs には数多くのオプションがありますが、今回はなるべく少なく指定しています。ここで使用しているオプションの機能は次のとおりです。
-dSAFER
EPS を構成している Postscript という言語は、出力ファイルとは別のファイルを削除することができる機能があります。Illustrator とかで作成された EPS であれば大丈夫とは思いますが、出所不明の EPS をまともに処理すると、場合によっては重要なファイルが削除されるなどの深刻な問題が発生ことも考えられます。 そんな EPS でも、そういう機能に限り動作無効にするオプションがこれです。 入力ファイルが PDF の時は関係無いような気もしますが、念のため指定しておきました。
-sDEVICE
出力方法を指定します。 gs –help で一覧が表示できます。そのうち、ラスタライズに関係あるものを抜粋すると、以下のものがあります(一部省略)。
形式白黒グレースケールRGBCMYK
BMPbmpmonobmpgraybmp16mなし
JPEGなしjpeggrayjpegjpegcmyk
PNGpngmonopnggraypng16m (8bit)
png48 (16bit)
なし
TIFFtifflzw
tiffpack
tiffgraytiff24nc (8bit)
tiff48nc (16bit)
tiff32nc (8bit)
tiff64nc (16bit)
PSDなしなしpsdrgbpsdcmyk
-r
ラスタライズするときの解像度を指定します。単位は dpi (dots per inch) 、または ppi (pixels per inch) となります。 例えば 150 を指定した場合、in.pdf の寸法が横1インチ(=25.4mm)×縦1/3インチであれば、ラスタライズ後の画像の寸法は横150ドット×縦50ドット になります。
-o
出力ファイル名を指定します。さらに -dBATCH -dNOPAUSE のオプションも併せて指定したものとみなします。 ラスタライズ化などのデータ変換処理であれば、-o を使用したほうが便利だと思います。 ちなみに出力ファイル名の指定だけする場合は -sOutputFile です。
ついでに、-dBATCH と -dNOPAUSE の説明もしておきます。
-dBATCH
変換処理が完了したら、Ghostsctipt を終了します。 このオプションを指定しない場合、または -dNOBATCH を指定した場合は、変換処理が終わっても Ghostscript は終了せずに引き続き Postscript 命令の入力待ちになります。この時に quit を入力するとようやく Ghostscript は終了します。 実例を見たほうが分かりやすいかもしれません。まず -dBATCH を指定しない場合です。
$ gs -dSAFER -sDEVICE=png16m -r150 -sOutputFile=out.png in.pdf
GPL Ghostscript 9.16 (2015-03-30)
Copyright (C) 2015 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 1.
Page 1
>>showpage, press  to continue<<
(return を押す)
GS>(入力待ち)
ここで quit と入力すれば、Ghostscript は終了します。 次に -dBATCH を指定した場合です。
$ gs -dBATCH -dSAFER -sDEVICE=png16m -r150 -sOutputFile=out.png in.pdf
GPL Ghostscript 9.16 (2015-03-30)
Copyright (C) 2015 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 1.
Page 1
>>showpage, press  to continue<<
(return を押す)
$
Ghostscript の入力待ちが無く、すでに終了してしまっています。
-dNOPAUSE
入力ファイルをひとつ処理完了したら、引き続き次の入力ファイルを処理します。 このオプションを指定しない場合は、入力ファイルをひとつ処理するたびに一時停止状態になります。次の処理を始めるには Rerturn/Enter キーを押す必要があります。 これも実例を挙げときます。まず -dNOPAUSE を指定しない場合です。
$ gs -dSAFER -sDEVICE=png16m -r150 -sOutputFile=out-%d.png in1.pdf in2.pdf
GPL Ghostscript 9.16 (2015-03-30)
Copyright (C) 2015 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 1.
Page 1
>>showpage, press  to continue<<
(return を押す)
Processing pages 1 through 1.
Page 1
>>showpage, press  to continue<<
(return を押す)
GS>(入力待ち)
この例の注意点として、入力ファイルが複数になっています。そのため、出力ファイル名に %d をつけています。こうすることで出力ファイルが連番で作成されます(out-1.png, out-2.png というふうに)。 -dNOPAUSE が無いと、ひとつ処理が終わるたびに return を押さなければならないことがわかります。-dBATCH を指定していないので、上述のように最終的に入力待ちになります。 次に -dNOPAUSE を指定した場合です。
$ gs -dNOPAUSE -dSAFER -sDEVICE=png16m -r150 -sOutputFile=out-%d.png in1.pdf in2.pdf
GPL Ghostscript 9.16 (2015-03-30)
Copyright (C) 2015 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 1.
Page 1
Processing pages 1 through 1.
Page 1
GS>(入力待ち)
このように return を押すことなく順次入力ファイルを処理してゆきます。 最後はやはり、 -dBATCH を指定していないために入力待ちになります。
さて。 gs のオプションの説明が長引いてしまいましたが、変換結果を見てみましょう。
72ppilogo-ghost.rasterize-72-gs
150ppilogo-ghost.rasterize-150-gs
300ppilogo-ghost.rasterize-300-gs
Photoshop, Illustrator でのラスタライズに比べて、文字の白フチが目立っているのが特徴でしょうか? これはこれでアリかな、という感じです。 たった一例で結果ゆうのもおこがましいですが、今回の条件 (RGB-PDF⇒RGB-PNG, アンチエイリアス無し)くらいでは、Ghostscript はへこたれないようです。 次回以降、いろいろと条件を変えて実験してみる予定です。 その2
使用バージョン: Photoshop CS5(12.0 x64) / Illustrator CS5(15.0.0) / Ghostscript 9.16