algonote

There's More Than One Way To Do It

マンガのPDFをJPEGに書き出す

マンガのPDFをJPEGに書き出そうとしてハマったのでメモ

yonkoma2dataは普通のマンガの変換にむかない。

無料配布しているブラックジャックによろしく機械学習に使いたいが、基本PDFでの提供なので、そのままだと何分扱いづらい。画像処理をするならPNGJPEGに変換したい。

PyConJP2016で発表のあったPythonで実現する4コマ漫画の分析・評論では、一部コードが公開されており、その中にはPDFファイルをページ毎のPNGファイルに切り出す機能がある。

これをそのまま使えば上手くいくのでは?と思い試しに使ってみたが、残念ながらとても重く、1時間待っても何も生成されない。

四コマ漫画と普通のマンガだとページサイズだったり、情報量だったりが違うのだろう。仕方がないので自分で実装してみる。

ImageMagickの限界

yonkoma2dataが内部で使用しているImageMagickのオプションをいじってみたところ、以下の設定が大きく速度に影響するようだ。

  • DPIの設定

    yonkoma2dataのデフォルトdpiは300。convertコマンド(ImageMagick)のデフォルト72にすると高速に変換できた。ただし、少し文字がボヤけてしまったので今回は下げない。

  • 画像変換の単位

    convertコマンドは複数ファイルを一括で変換できる。しかし、ファイル数が多くなるにつれ重くなるようだ。試しにいくつかの画像ファイルを一つずつ変換したら速度が上がったので今回はこちらをメインに試す。

PDF -> PPM -> JPEG

convertコマンドではPDFからJPEG(PNG)に一括変換できるが、PDFをPPMという形式の画像ファイルに変換してからJPEGに変換すると個別に変換できる。

  • Homebrewでの依存ライブラリのインストー
brew install imagemagick ghostscript poppler

popplerがpdfをppmに変換できるpdftoppmのパッケージ。

  • PDFのPPMファイルへの変換
pdftoppm -r 300 original.pdf page
convert -define jpeg:size=878x1240 -density 300 -geometry 878x1240 page-001.ppm 001.jpg

後はこの変換を繰り返すだけだが、手間なのでrubyで雑にまとめ、無事変換完了。

f:id:hiromichinomata:20170716232042p:plain

Credit: ブラックジャックによろしく佐藤秀峰