10月 19

ImageMagickで画像の情報を得る

画像のいろんな情報を得るには、
identify -verbose
とするわけですが、
解像度を取得しようとコードを書いていたところ、ちょっとおかしな個所を見つけたので調べてみました。

まず、解像度は
「Resolution」
で取得できます。
最初はこれだけ見ていたのですが、実際のものと違うことがあったので悩んでいました。

よくみると
「Units」
という項目があり、これで単位を指定していることが判明。
通常は
「PixelsPerInch」
インチを基準にしていてDPIやPPIと言われるもので、
これであればResolutionはそのままDPIとなります。

次に
「PixelsPerCentimeter」
これが曲者でした。
インチとセンチを換算する必要があります。
1cm = 1inch / 2.54
なので、
[pixel/inch] = [pixel/cm] * 2.54
というわけです。

ちなみに
「Undefined」
はどういうものかよくわかりませんが、Resolutionは100が多いようです。

5月 01

ImageMagickが壊れた?

WindowsVistaにインストールしてあるImageMagick6.3.2 Q8をPerlから呼び出すときのお話です。
少しの間、開発を停止していた部分を手直しすることになって画像を生成する部分が正常に動かなくなっていました。
ログをみると次のようなエラーが表示されていました。

Can't load 'C:/Perl/site/lib/auto/Image/Magick/Magick.dll' for module Image::Magick: load_file:再帰が深すぎます。スタックがオー
バーフローしました。 at C:/Perl/lib/DynaLoader.pm line 230,  line 855.


呼び出し元も、呼び出し先も階層がそんなに深いわけでもなく、動いていたときのままです。
何かのパッチでおかしくなったのかもしれないです。
そういえば、最近CPANの一括updateをしたような・・・
いろいろ調べてみましたが、これだという原因は見つかりませんでした。

結局、ImageMagickを一度アンインストールしてから入れなおしたところ、正常に動作しました。
ちなみに、上書きで更新した場合は同じメッセージが表示されて動きませんでした。
お仕事用のシステムなので、ヒヤヒヤしました。ほっと一安心です。

12月 14

イラレと同じ大きさの画像を作る

ImageMagickでEPSを背景なしのpngにする方法があったけど、やり方をすっかり忘れてしまったので、GostScriptにお願いすることに。

・イラストレータで見た大きさと同じ画像に変換するには「-r72」のおまじない
・背景を透明にするには「-sDEVICE=pngalpha」のおまじない

を唱えよう

gs -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=pngalpha -dEPSCrop -r72 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile=output.png input.eps

Windowsの場合はgsではなくgswin32cになります。

9月 01

Perl:PerlMagickのannotateでrotateを指定する場合

図形をrotate する場合は普通に左下が始点だけど、

annotateのパラメータとしてrotateを使う場合は、

左のベースラインが基準になるので、微妙な位置に描かれてしまう。

ベースラインは文字の高さの12.5%の位置。つまり72ptなら

72 * 0.125 = 9

左下から9ptの位置になる。

しかしここを基準に回転させるので実際には、

72  – 9 = 63

63pt分、上にシフトさせてやれば希望の位置に収まる。