LoginSignup
8
7

More than 5 years have passed since last update.

ImageMagickで数百枚の画像ファイルを一気にPDFにまとめようとするとキャッシュを食いまくる問題への対処

Last updated at Posted at 2016-08-18

背景

ImageMagick、便利なんだけども $ convert input-*.jpg output.pdf みたいに "input-" から始まるファイル名のJPEGファイルを一つのPDFファイルにまとめようとすると100GB以上もの(!!!)超大量のキャッシュを生成してしまう。(僕の環境だけ?)
ノートPCでの作業でこれだけのディスクスペースを要求されるのは超つらい。ので、なんとか回避法がないか探してみた。

結論

ImageMagickだけを使うのではなく、他のツールと連携させればキャッシュを生成させずに複数のJPEGファイルをPDFファイルへとまとめられる

具体的にはPDFtk (https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/) というツールと組み合わせる。このツールはPDFファイルに対する編集操作が得意みたいなので、戦略としてはImageMagickでJPEGファイルを1ページずつのPDFファイルへと変換した後、複数のPDFファイルをPDFtkで一つのファイルへとまとめるという流れとなる。

ツールのインストール

MacでHomebrewを使っているなら、各ツールは以下の手順でインストールできる

  • ImageMagick
    • $ brew install imagemagick
  • PDFtk
    • $ brew tap spl/pdftk
    • $ brew install pdftk

変換処理

例えば、input-0000.jpg、input-0001.jpg、 ... input-0600.jpg を output.pdf という一つのPDFファイルへとまとめる処理は以下のようなシェルスクリプトを作成することで行える。

#!/bin/sh

jpgs="input-*.jpg"
for jpgpath in $jpgs; do
  number=$jpgpath
  number=${number#img-}
  number=${number%%.*}
  echo "Generating output-${number}.pdf..."
  convert -verbose $jpgpath output-${number}.pdf
done

echo "Generating output.pdf..."
pdftk output-*.pdf cat output output.pdf

echo "Removing tmp files..."
rm ./output-*.pdf

この方法だと一時的に1枚ずつのPDFファイルが一時ファイルとして生じてしまうが、ImageMagick単体での変換作業に比べれば圧倒的に少ないディスクスペースで変換が行えるようになった。

めでたしめでたし。

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7