GhostscriptでPDFを画像に変換(PDF2PNG)

正直、目から鱗。こんな便利なものがあったとは…

きっかけは“RedBulletin”。2005年以降のバックナンバー、ファイル数にして200以上。一応、年別、レース別に整理して保存しているんですが、「○○が表紙の号はどれだっけ?」といちいちAdobeリーダーを立ち上げて探すのも面倒になってきたので、表紙のサムネイルでも作って整理し直したいなと思ったわけです。便利なソフトでもないかなと、「PDF 画像に変換」などのキーワードで検索していたところ、Ghostscriptを使うのが一番だという結論に行き当たりました。

スクリプトのインストールは、圧縮ファイルを展開するだけ。インターフェイスは専用のソフトが別にあるそうですが、なくてもそのままコマンドラインから起動できます。どうせ英語だし、大量のファイルを処理するにはバッチファイルを使った方が速い、ということで、余計なものは入れずに素で使ってみることにしました。

高度な処理にあたってはフォントの問題が出てくる可能性があるそうですが、PDFからサムネイル画像を作る程度の処理であれば大きな問題はなさげです。ネックなのは、大量のファイルを一気に処理させようとすると結構なお時間を食ってしまう点でしょうか。レッドブルテンの例でいえば、PDFファイルから1ページ抽出するのに約30秒というところでしょうか。どうやらメモリを大食いしてるようなので、パソコンのスペックでも差が出ると思います。(うちで最も高性能なMacで実験してみたかったんですが、バッチファイルが使えないのでまだ試していません。)

[PDF形式→画像形式]の変換だけでなく、逆に[画像形式→PDF形式]や、単に[画像形式→画像形式]といった変換も自由自在に行えます。こんなに便利なものがあるなんて、もっと早く知っておくべきでした。

--- ( 以下、超個人的な覚え書き ) ---

まずは、とっかかりということで、

ここで紹介されているバッチファイルをそのままいただきました。pdf2jpgはバッチリ動きましたが、応用編として紹介されているpdf2pngはエラーが出てしまいました。

マニュアルで確認したところ、

Ghostscript provides a variety of devices for PNG output varying by bit depth. For normal use we recommend png16m for 24-bit RGB color, or pnggray for grayscale. The png256, png16 and pngmono devices respectively provide 8-bit color, 4-bit color and black-and-white for special needs.

The pngalpha device is 32-bit RGBA color with transparency indicating pixel coverage. The background is transparent unless it has been explicitly filled. PDF 1.4 transparent files do not give a transparent background with this device. Text and graphics anti-aliasing are enabled by default.

The pngalpha device has one option. The other png devices have no special options.

とありましたので、バッチファイルの

-sDEVICE=png

-sDEVICE=pngalpha

に書き換えてリトライ。これで、pdf2pngにも成功しました。

ただ、ここまでの設定では、PDFに格納された全てのページを画像変換することになり、処理に時間が掛かってしまいます。今回は表紙だけを変換したいので、1ページ目のみを変換できる方法を調べました。マニュアルと格闘したのですが、英語、英語、英語の連続であえなくリタイヤ。「ghostscript pdf ページ指定」などのキーワードで検索するも、なかなか参考になるサイトが見つかりません。

そこで、バッチファイルを実行したときに "FirstPage 1 LastPage 10" のような文字列が吐き出されていたことを思い出し、「ghostscript firstpage lastpage」で検索。

見よう見まねに、出力ファイル名と入力ファイル名の間に

-dFirstPage=1 -dLastPage=1

と書き加え、実行。これで無事にPDFファイルから表紙のみを抽出してPNG画像に出力することができました。

pdf2png.bat - とりあえずサンプル

@C:\gs\gs8.63\bin\gswin32c.exe -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pngalpha -r300 -sOutputFile=%1%%03dTo.png -dFirstPage=1 -dLastPage=1 %1

解像度は300dpiにしています。アルファチャンネルを持つPNG画像を高解像度で出力するわけですから、当然バカでかい画像が出力されます。小さいのが好みの人は数字を削ってお好みに合わせて下さい。上のマニュアルにあるように、アルファチャンネルを使わないよう指定することも可能です。また、解像度ではなく、画像のサイズを直接指定したい人は、そういう方法もありますんで、マニュアル読むなり、ググるなりして探して下さい。

しかし、いきなりサムネイルサイズで出力させようとすると、画質の問題が生じます。マニュアルによると、Ghostscriptの標準設定(解像度を指定しない場合に自動補完される数値)は75dpiです。モノクロやグレースケールの変換であればこの数値でほぼ問題なしですが、変換元になるファイルの画素数や色数が多いものになればなるほど、どうしても低画質感の否めない粗い画像が出力されてしまうことがしばしば起こります。

好みの画質になるまで一回一回、スクリプトを走らせて画質を確認するというのも結構面倒な作業なので、私は、まずは高画質で出力して、減色とリサイズは専用のソフトに任せるつもりです。二段階の作業になりますが、結果的にはこちらの方が手早く、かつ満足な仕上がりが得られるはずです。要は用途次第ということですね。

ミナルディは永遠に偉大なり! | メイン | 「ダートの頂点は園田で決まる!」 JBC園田開催まで、あと3日。

トラックバック

このエントリーのトラックバックURL:

コメントを投稿

(If you haven't left a comment here before, you may need to be approved by the site owner before your comment will appear. Until then, it won't appear on the entry. Thanks for waiting.)


画像の中に見える文字を入力してください。

 Restore Buffaloes !!

Information

Calendar

2010年5月
Sun Mon Tue Wed Thu Fri Sat
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

Mobile

Etc.

あわせて読みたい
Listed on BlogShares
Subscribe to my feed, なにわっち's Weblog
Subscribe to my feed, なにわっち's Weblog
人気blogランキング
ブログランキング・にほんブログ村
にほんブログ村 野球ブログ
にほんブログ村 野球ブログ - 思い出の球団
にほんブログ村 競馬ブログ
にほんブログ村 競馬ブログ - 地方競馬・ばんえい
にほんブログ村 車ブログ - モータースポーツ
にほんブログ村 トラコミュ - 近鉄バファローズ
にほんブログ村 トラコミュ - 園田競馬・姫路競馬
人気ブログランキング・ブログの殿堂
blog seo tool : track word
RSS feed meter for  http://naniwacchi.just-size.jp/weblog/

My Profile

My Bookmark

パシフィックリーグ連盟歌(公式ソング) 『白いボールのファンタジー』
blogtimes.png
This Weblog is licensed under the Creative Commons License.
Creative Commons License
Hosted by JSN
Powered by Movable Type 4.27-ja
© Copyright 2003-2010. Naniwacchi, All Rights Reserved.