ImageMagickでPNGファイルのdpiを変更する

2019/01/28

ImageMagickでPNGファイルのdpiを変更しようと思ったらハマって試行錯誤する羽目になりました。どうにかうまくいったので手順を残しておきます。

まずはImageMagickのバージョンを確認。

$ convert -version
Version: ImageMagick 6.9.7-4 Q16 x86_64 20170114 http://www.imagemagick.org
Copyright: © 1999-2017 ImageMagick Studio LLC
License: http://www.imagemagick.org/script/license.php
Features: Cipher DPC HDRI Modules OpenMP
Delegates (built-in): bzlib djvu fftw fontconfig freetype jbig jng jpeg lcms lqr ltdl lzma openexr pangocairo png tiff wmf x xml zlib
$

現在のdpiを確認します。verboseオプションは出力が大量だったのでgrepで絞り込んでいます。

$ identify -verbose sample01.png | grep 'Resolution\|Units'
  Units: Undefined
$

未定義、とみなされるご様子。これを印刷用途で標準とされている300dpiに変換してみます。

$ convert -density 300 -units PixelsPerInch sample01.png sample02.png

ここがちょっとハマりポイント。

$ convert sample01.png -density 300 -units PixelsPerInch sample02.png

だとUnitsPixelsPerInchにならないんですよね。記述の順番で挙動が変わるっぽい。ImageMagickお得意の謎制約なのか、特定バージョンに限った挙動なのかは分からず...

ともあれ、結果を確認します。

$ identify -verbose sample02.png | grep 'Resolution\|Units'
  Resolution: 118.11x118.11
  Units: PixelsPerCentimeter
$ identify -units pixelsperinch -verbose sample02.png | grep 'Resolution\|Units'
  Resolution: 300x300
  Units: PixelsPerInch

どうも-unitsを明示しない場合のUnitsが何になるかはidentify次第っぽいので、明示的にPixelsPerInchを指定してあげます。

相変わらずImageMagickはなんでもできるけど挙動が難解過ぎる...

参考URL




関連(するかもしれない)記事


おススメ