またまた山本です。
以前ご紹介した自社サービスのZENPREの反響が思いのほか大きく、とりあえずほっとしております。
いいスタートダッシュは切れたので、引き続き新たな機能の実装を続けてまいります。
今回はZENPREで使用している機能の1つを紹介させていただきます。
ZENPREではアップロードされたMicrosoftOfficeのPowerPointのデータやPDFを画像変換することで、Flashを通しての配信を可能にしておりますが、
この時のフローとしては、3つの段階を経ています。
OpenOffice + JODConverterでppt,pptxファイルをpdfファイルへ変換(省略可)
↓
poppler(Xpdf)を使用して、pdfファイルをppmファイルへ変換
↓
ImageMagickを使用して、ppmファイルをjpgへ変換
つい最近まで、OpenOfficeのバージョンは3.2.0でした。
このバージョンでは、Office2007の形式である「pptx」も変換可能なのですが、
1枚目に表示される「クリックしてサブタイトルを入力」というガイドまでも変換されてしまうというバグがありました。
しかし、最近バージョンが3.2.1にあがりその問題が解消されましたので、晴れて「pptx」にも対応いたしました。
開発段階においては、2番目のフローである「pdf→ppm」変換をせず、
「pdf→jpg」変換を行っておりました。
しかし、この変換方法だと生成される画像の解像度が低いという問題がありました。
600×480ほどのサイズであれば問題なく、表示もそれに合わせればよいのですが、ZENPREの機能の一つにフルスクリーンモードというのがあり、
それを使用すると利用者によってはとてつもなく大きいモニターで表示することになり、
その場合、画像が引き伸ばされぼやけてしまうことになります。
そこで着目したのがpopplerでした。
popplerの前身はXpdfであり、pdfをppmという高解像度の画像へ変換することが可能です。
以下は、ppmに変換せずに生成したjpgとppmに変換した上で生成したjpgの2ファイルです。
ppm処理しないjpg
ppm処理したjpg
前者は粗さが目立ちますが、後者は文字の縁が滑らかなまま表示されています。
もちろんファイルサイズが大きくなってしまいますが、大した負荷ではないので採用することにしました。
インストールは、Redhat系をご使用であればyumインストールで使用可能なのですが、
yumだと肝心のpdfをppmに変換する機能である、「pdftoppm」が含まれてません。
情報が少なくて、pdftoppmを導入する方法がなかなかわからなかったのですが、
popplerをyumインストールするのではなく、ソースからインストールすることで解決しました。
Poppler
課題としては、全体的に変換に時間がかかるということです。
pdf変換においても結構時間がかかるのですが、その上にppm変換を挟んでいるのでどうしても短縮が困難です。
pptの変換サービスとしては有名なところでSlideshareがあると思いますが、
この変換速度はかなりなものだと思います。
これに近づけたらと思います。