つうさにメモブログ

つうさにがメモをブログとして書いていくところ

GhostscriptでPDFファイルをPNG形式の画像に変換する

Ghostscriptの公式ページを見ればすぐわかった...

GhostscriptでPDFをPNG出力

やり方

公式ページを見ればすぐわかります。

www.ghostscript.com

Ghostscriptは様々な形式でのPNG出力をサポートしています。普通は以下の表の上2つ(png16mpnggray)がオススメのようです。

バイス*1 意味
png16m 24-bit RGB color
pnggray grayscale
png256 8-bit color
png16 4-bit color
pngmono black-and-white
pngmonod black-and-white (internal 8 bit grayscale rendering)
pngalpha 32-bit RGBA color
-r オプション

-rオプションでdpi(dots per inch)での解像度指定ができます。-r300とか-r200x300とかの指定ができます。

-sOutputFile オプション

-sOutputFile=filenameで出力ファイル名を指定します(必須)。PDFが複数ページでPNGも複数ファイル出力したいなら、出力ファイル名に%dとかを含めます。PDFが複数ページなのに出力ファイル名に%dを含めないと、1ページ目しか出力されないみたいです。

以下のページによると、-sOutputFile=out-%d.jpg -dBATCH -dNOPAUSEという複数のオプション指定は-o out-%d.jpgと短く書くことができます。

www.ghostscript.com

-dTextAlphaBits、-dGraphicsAlphaBits オプション

アンチエイリアスします。-dTextAlphaBits=n-dGraphicsAlphaBits=nでnに数値を与えます。アンチエイリアスはテキストとグラフィックで別々に有効化できるようです。nに4を与える(-dTextAlphaBits=4などとする)と最適のようです。

実行例

ということで、上の使い方に従えばGhostscriptでPDFファイルをPNGファイルに変換できます。以下にいくつか実行例を書きました。(今回は単一ページのPDFファイルのみを扱った)

テキストのみのPDFファイル sample.pdf を sample.png に変換
gs -sDEVICE=pnggray -r1000 -dTextAlphaBits=4 -o sample.png sample.pdf

解像度は適当なものを選びました。

sample.pdf を透過PNGファイル sample_alpha.png に変換
gs -sDEVICE=pngalpha -r1000 -o sample_alpha.png sample.pdf

DEVICEにpngalphaを指定した場合、出力は透過PNGになり、自動的にアンチエイリアスが有効化されます。

とあるPDFファイル yukidaruma.pdf を(透過しない)yukidaruma.png に変換
gs -sDEVICE=png16m -r300 -dGraphicsAlphaBits=4 -o yukidaruma.png yukidaruma.pdf

この出力結果は以下です。

f:id:tsuu_mmj:20191127095627p:plain
素敵なゆきだるま

おしまい

実はGoogleで「Ghostscript pdf to png」などと検索しても、上で貼ったGhostscript公式Webページが上位に出てきません。上位に出てきたサイト(コード○グ含む)を見ても、なんだか難しそうだと思ってしまいました。

しかし、Ghostscriptの公式Webページを見たらすぐわかったので、今回は本当公式Webページをちゃんと参照しましょう案件でした。(最近 こんな記事 を読んだばかりなのに...と思った)

今回PDFの作成にはLaTeXを使用しています。ソースコードはGistに置きました。

おしまい。