シェルスクリプトでディレクトリ内のPDFを一括画像化したよ
どうも、今回はシェルスクリプトを使ってディレクトリ内にあるPDFファイルを全部画像にしました。画像の拡張子はPNGとかJPGなら大丈夫かなと思います。
今回はお手軽にできる2種類の方法を紹介します。
OS : Ubuntu 16.04 LTS
1. ImageMagickだけでやる方法
さて、まずはやるだけなら簡単な方法を紹介します。この方法では、ImageMagickというソフトウェアを使用します。まずはこのImageMagickをインストールするところから始めていきましょう。インストールするためには以下のコマンドを使用してください。
1 |
$ sudo apt-get install imagemagick |
今回はUbuntuでの作業なのでa”pt-get”を使用しましたが、インストール用のコマンドは自身の環境に合わせて選択してください。
では、今インストールしたImageMagickを使っての画像化します。画像化には以下のコマンドを使います。
1 |
$ convert input.pdf output.jpg |
このコマンドで入力したPDF(input.pdf)がoutput-xxx.jpgという連番の画像になって出力されていると思います。さて、今出力した画像を確認してみてください。もし綺麗に画像化できているのでしたら、あなたは運がいいです。しかし、残念ながら自分はうまくいきませんでした。調べると、”convert”コマンドを実行する際に、入力するPDFに合わせたオプションを渡してあげないと綺麗に出力されないみたいでした。
今回の目標はディレクトリ内のPDFファイル群をまとめてPNGに一括変換がしたいので、いちいちオプションを設定することはできません。というわけで、他の方法を探します。
2. PPMを経由する方法
どうやら、直接PDFファイルを画像化するのは、難しいようです。というわけで、一度PPMという画像形式に変換してから目的の画像形式に直すということに挑戦しました。PPM形式は普段あまり触れる機会はないかと思いますが、構造はとても単純なので、自分で画像処理プログラムの練習なんかをするときには最適の形式だと思います。
では、PPM形式を経由して変換していきます。変換には”pdftoppm”というコマンドを使用します。これはその名の通りPDFからPPMに変換してくれるコマンドです。こちらは特別なオプションを渡さなくても、それなりに綺麗な画像を出力してくれます。というわけで、一つのPDFファイルをPNG形式に変換するには以下のようになります。
1 2 3 4 |
pdftoppm input.pdf image convert *.ppm ./%d.png rm image-*.ppm |
このコマンドを実行することによって、PDFを連番PNGの形式に変換することができます。最後に、このコマンドを使ってディレクトリ内のすべてのPDFを変換するためのスクリプトを掲載して終わりたいと思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#!/bin/bash files="*.pdf" for filepath in ${files} do filename=`basename ${filepath} .pdf` echo ${filename} mkdir ${filename} pdftoppm ${filename}.pdf image convert *.ppm ./${filename}/%d.png rm image-*.ppm done |
ちなみに”convert”する際の拡張子を変えればPNG以外の物にも対応できると思います。
おわりに
さて、今回はPDFの画像化をやってきました。趣味の開発をしていて必要になったので調べましたが、PDFを使わない方針にガラッと変わってしまったので、ここにまとめた内容はほぼほぼ無駄になってしまいました……。まぁでも、記事のネタにはなったので良しとします。