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

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
だとUnits
がPixelsPerInch
にならないんですよね。記述の順番で挙動が変わるっぽい。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
- Saba note | PHP | Imagemagickで解像度を指定する
- ImageMagickで解像度の指定がうまく行かない | ぺんラボブログ
- あーありがち - ImageMagickで画像の解像度を変える
- Cannot set units to pixelsperinch? - ImageMagick
- Problems with -density if -unit PixelsPerInch not specificied before input image - ImageMagick
- 「解像度」の理解があいまいだったので備忘録としてまとめてみた | Tech Blog | 株式会社INDETAIL - インディテール
おススメ