2013年6月11日火曜日

GraphicsMagickのconvertで輝度を変更してみたけど

何かコマンドラインで簡単に画像を加工するなら、たいていの方は ImageMagick とか GraphicsMagick とかの convert を使うのではないかと思います。

私が使っているのは GraphicsMagick 1.3.16 です。

で、何をやりたいかというと、暗い画像を作りたいだけなんです。

壁紙用に画像を加工したくて、普通の画像だと明るすぎて壁紙にするとじゃまになるので、輝度を 80〜60% 程度に変更したいと。ただそれだけ。

輝度を変更するだけなら、たいていの convert の使い方を解説するサイトでは -modulate オプションを使えと書いてありました。

$ convert image.jpg -modulate 60 image_m60.jpg

こんな感じですね。

ところが、これで画像を加工したら画像が妙な感じになってしまいまして…

まず、こちらが元画像。


で、上記コマンドで編集したものがこちら。


車両部分はきちんと輝度変更されているのですが、空が…、なんだこれ?

たぶん、空部分が白飛びしていることと、-modulate が HSL 色空間に対して変更をかけることと、なんかそのあたりの関係でこのような画像になってしまうのでしょうが、そんなややこしいことは関係なく、空の部分がほぼ真っ白なら、それが 60% 程度のグレーになっている画像が欲しいだけなのです。。

輝度の変更なんて、-modulate かければいいやと思ってたので、他のやり方がわからない。これは困った。

どこ調べても「輝度の変更は -modulate」としか書いてないぞ。同じような問題に遭遇している方はいないのかな? それとも、なんかこんなことは当たり前すぎて、すごく簡単な解決方法があるのかな?

で、最終形はこちら。



さしあたり、暗い画像があればいいので、真っ黒な画像を生成し、それと元画像を -average で合成し、元画像に対して輝度 50% の画像を作って納得することにしました。

書くまでもないけど、こんな感じ?

$ convert -size 800x533 xc:black bk.jpg
$ convert image.jpg bk.jpg -average image_av.jpg

とりあえず欲しい画像ができたからいいけど、-modulate オプションはもうちょっと調査しないとよくわからないな。輝度変更するための他のオプションがないのかどうかも含めて。。

同じ問題にぶつかってる方はいないかな…。

0 件のコメント:

コメントを投稿