画像とPDFを自由に加工できるimagemagickのconvertコマンドの使い方
はじめに
Ubuntuを使っていると、画像をPDFに変換したり、PDFを連結したりという作業がOS Xの時に比べて良いGUIアプリがまだありません。ただ、imagemagick
のconvert
コマンドを使用するとかなり強力な処理を実行できます。このconvert
コマンドの使い方についてまとめます。
imagemagickのインストール
convert
コマンドはimagemagick
に含まれているのでインストールします。
$ sudo apt-get install imagemagick
PDFを画像に変換、画像をPDFに変換する
以下のようにoriginal.png
がoriginal.pdf
として新規作成されます。
$ convert original.png original.pdf
逆にPDFを画像に変換したい場合は順番を入れ替えます。
$ convert original.pdf original.png
つまり、基本的な使い方としては以下のようになります。
$ convert 変換前ファイル 変換後ファイル
実際には色々なオプションがあり、オプションを使用する場合は以下のように使います。
$ convert オプション 変換前ファイル 変換後ファイル
複数の画像を1つのPDFに変換する
以下では、正規表現を使ってimage
で始まるPNGファイルを全てまとめて1つのPDFファイルにします。5つの画像ファイルがあれば5ページのPDFファイルになります。
$ convert image*.png mypdf.pdf
回転する
flip
、flop
、rotate
オプションを使用することで画像やPDFを回転できます。
上下反転
$ convert -flip image.jpg image-fliped.jpg
左右反転
$ convert -flop image.jpg image-floped.jpg
角度を指定して回転
$ convert -rotate 180 image.jpg image-rotated.jpg
複数の画像を全て180度回転して1つのPDFに変換する
以下のようにすることで、フォルダ内にある全てのJPG画像を180度回転した上で、1つのPDFにまとめることができます。
$ convert -rotate 180 *.jpg output.pdf
PDFの指定したページのみを画像に変換する
例えばoriginal.pdf
という名前のPDFファイルがあったとき、この5ページ目を 5.jpg
という名前の画像ファイルに変換したい場合は以下のようにします。
$ convert original.pdf[5] 5.jpg
EXIF情報を削除する
EXIF情報(撮影位置、カメラ機種、撮影時のカメラ設定など)を全て削除します。以下は元々の画像も残ります。
$ convert -strip original.jpg noexif.jpg
グレースケールに変換
画像、PDFどちらでも以下のように-type GrayScale
を指定することでグレースケール化できます。
$ convert -type GrayScale original.jpg grayscale.jpg
シェルスクリプトと併用して応用する
シェルスクリプトを組み合わせることで色々な処理ができます。
複数の画像ファイルそれぞれをPDFに変換する
以下のように、for
を使って、ファイル名が条件に一致するファイルをそれぞれ画像ファイルからPDFに変換するためのシェルスクリプトを作成します。ここではこのシェルスクリプトファイル名をconvert.sh
とします。
#!/bin/bash
for var in `seq 22 46`
do
convert file-"$var".jpg file-"$var".pdf
done
このファイルに以下で実行権限を与えて実行すると、file-22.jpg
〜file-46.jpg
がそれぞれfile-22.pdf
〜file-46.pdf
に変換され作成されます。
$ chmod +x convert.sh
$ ./convert.sh
ちなみに、上記は以下のように1コマンドとしてそのままターミナルにコピペしても使えます。
$ for var in `seq 22 46`; do convert file-"$var".jpg file-"$var".pdf; done
複数の画像をそれぞれ180度回転したものを作成して保存
以下を実行すると、現在のディレクトリにある全てのPNGファイルを180度回転したものをrotated-元のファイル名.png
という名前で作成します。
$ for file in *.png; do convert $file -rotate 180 rotated-$file; done
参考サイト
以下のサイト様がかなり参考になりました。画像のリサイズなどについてもわかりやすくかかれています。
まとめ
コマンドを使った処理は最初は抵抗あるかもしれませんが、大量のファイルを処理したい場合などはかなりの威力を発揮します。