たとえば複数ページのPDFをJPGの複数ファイルに変換するときは次のようにする。
$ convert foo.pdf foo.jpg
うまくいくとfoo-0.jpg, foo-1.jpg, ... というように展開される。 *1
ただこれがうまくいかないことがあって、複数ページなのに最初のページしか出力されないことがある。これはAdobe系のツールで生成されたPDFとGhostscriptが出力に使うpngalphaの相性が悪いために起こるらしく、詳しくはpossible bug converting acrobat pdf to other formatsに書いてある。
対応としては、pngalpha
の代わりにpnmraw
を使うようにdelegates.xmlを設定してやればよい。
homebrewで入れた場合delegates.xmlは/usr/local/opt/imagemagick/etc/ImageMagick/delegates.xml
にあるので、これを書き換える。
cp /usr/local/opt/imagemagick/etc/ImageMagick/delegates.xml{,.org} vim /usr/local/opt/imagemagick/etc/ImageMagick/delegates.xml diff /usr/local/opt/imagemagick/etc/ImageMagick/delegates.xml{.org,}
pngalpha
はdecode="ps:alpha"
の行にだけ存在するので、その一箇所だけを書き換えれば良い。
--- /usr/local/opt/imagemagick/etc/ImageMagick/delegates.xml.org 2013-05-28 20:14:47.000000000 +0900 +++ /usr/local/opt/imagemagick/etc/ImageMagick/delegates.xml 2013-05-28 20:11:30.000000000 +0900 @@ -102,7 +102,7 @@ <delegate decode="ps" encode="eps" mode="bi" command=""gs" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=epswrite" "-sOutputFile=%o" "-f%i""/> <delegate decode="ps" encode="pdf" mode="bi" command=""gs" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pdfwrite" "-sOutputFile=%o" "-f%i""/> <delegate decode="ps" encode="print" mode="encode" command="lpr "%i""/> - <delegate decode="ps:alpha" stealth="True" command=""gs" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pngalpha" -dTextAlphaBits=%u -dGraphicsAlphaBits=%u "-r%s" %s "-sOutputFile=%s" "-f%s" "-f%s""/> + <delegate decode="ps:alpha" stealth="True" command=""gs" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pnmraw" -dTextAlphaBits=%u -dGraphicsAlphaBits=%u "-r%s" %s "-sOutputFile=%s" "-f%s" "-f%s""/> <delegate decode="ps:cmyk" stealth="True" command=""gs" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pam" -dTextAlphaBits=%u -dGraphicsAlphaBits=%u "-r%s" %s "-sOutputFile=%s" "-f%s" "-f%s""/> <delegate decode="ps:color" stealth="True" command=""gs" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pnmraw" -dTextAlphaBits=%u -dGraphicsAlphaBits=%u "-r%s" %s "-sOutputFile=%s" "-f%s" "-f%s""/> <delegate decode="ps:mono" stealth="True" command=""gs" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pbmraw" -dTextAlphaBits=%u -dGraphicsAlphaBits=%u "-r%s" %s "-sOutputFile=%s" "-f%s" "-f%s""/>
追記
delegates.xmlのパスはconvert -list delegate
で表示される。
$ convert -list delegate Path: /usr/local/Cellar/imagemagick/6.8.0-10/etc/ImageMagick/delegates.xml (snip)
homebrewで入れた場合、/usr/local/opt/imagemagick
は/usr/local/Cellar/imagemagick/{version}
へのエイリアスになっているので、ImageMagickを入れるたびに上記の修正が必要になるかもしれない。
*1:単一ページの場合にはfoo.jpgになる