mieki256's diary



2007/03/25() [n年前の日記]

#1 [windows][prog] Windows版 ImageMagick で入れた PerlMagick は動作が変

ImageMagick-6.3.3-3-Q16-windows-dll.exe と ImageMagick-6.3.3-3-Q8-windows-dll.exe を入れ替えて実験してたのだけど。composite の際に opacity を与えるとおかしなことに…。今までは opacity に 100 を与えたら意図通りに結果が得られたのだけど、もっと大きい値を与えないと今までの動作にならないような…?

あー。判った。 :

opacity が、0〜100 じゃなくて、0〜255になってる。…元々そういう仕様だったのか、それとも仕様が変更されたのか。そもそもドキュメントにどんな値を取るのか書いてないのが厳しい。

つーかバージョンによって動作が全く違ったり、仕様がいつの間にか変わったりしたんではついていけんのだが。>ImageMagick。しかも以前のバイナリは置いてないみたいだし。

ImageMagick Q8 と Q16 の違い。 :

Q8 は、各チャンネルの深度が8bit。Q16 は、各チャンネルの深度が16bit。一般的には、Q8 = RGB24bit + αチャンネル8bit で事足りるなかなと。もっとも、Q8・Q16を選択できるのは Windows版のみで、UNIX系の版は標準でQ16らしい。

opacity に与える値にも違いがあることに気づいた。Q8 は、0〜255。Q16 は、0〜65535。Q8 なら opacity が反映されるのに、Q16 では反映されないように見えて、自分、首を捻ってたけど。深度の違いがそんなところにも出てくるとは。考えてみれば、0〜100で与えるより、0〜255 or 0〜65535 で与えたほうが、細かく、というか正確に、パラメータを指定できるのだな。

しかし、PerlMagick 上で opacity を与える場面では困る。Q8・Q16 のどちらかが入ってるか把握したうえで渡さないといけない。幸い、PerlMagick のバージョン情報を取れるみたいではある。
# PerlMagick version check

my $imgtmp = Image::Magick->new;
my $perlmagickversion = $imgtmp->Get('version');
undef $imgtmp;

# ImageMagick Q8 or Q16 (0:Q8 / 1:Q16) set

$quality16_enable = 0;
if ( $perlmagickversion =~ / Q16 / ) {
    $quality16_enable = 1;
}
取得文字列の中に、「Q8」があるか、「Q16」があるかで、処理を分けられそう。

「Q8」「Q16」について、Windows と Vine Linux で、convert -version と打った際の出力文字列を確認してみたけど。どちらも、「Q8」「Q16」は含まれてるように見える。… Vine Linux のほうは、PerlMagick を入れてないので、PerlMagick 利用時も似たような文字列が出てくるか判らないけど。その際は、
my $str = `convert -version`;
とすればどうにかなるかなと。

以上です。

過去ログ表示

Prev - 2007/03 - Next
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project