ImageMagickで半透明画像を作る

前のエントリーに貼っている数式画像は、このサイトの数式画像作成CGIで作った画像を、ImageMagickで白黒反転して半透明にしている。(追記:現在は半透明ではない。このweblogの白背景化に伴い不透明画像に変更した。)
今回実際に行ったコマンドを書き記す。

convert -negate -resize 75% original.png tmp_nega.png
convert tmp_nega.png -channel alpha -fx "g" tmp_blur.png
convert tmp_blur.png -fx "g>0" result.png
1行目が白黒反転と縦横75%縮小、2行目が各ピクセルのα値(非透過率)の設定、3行目が背景でない部分を白にするコマンドだ。2~3行目では白の度合いを緑のレベルで代用しているが、元画像は白黒なので、赤や青を使っても同じだ。

白さに比例したα値を設定した後に色を白にするのは、そうしないと輝度が下がりすぎてしまうからである。例えば輝度50%のピクセルに50%の透過率を与えると、黒地だと輝度が25%に下がってしまう。黒地のモノクロ画像を半透明にするには、その白さをα値にして、白で塗り潰せば良いのである。
しかし、それだと、暗色の背景で透過合成表示してくれない画像ビューワで見ると真っ白になってしまうため、3行目では白の度合いが0のピクセルだけは黒にしている。"g>0"を"1"にすれば白で塗り潰すことになる。

なお、この例では変換の度に異なる画像ファイルを作るようにしているが、上書きで良いなら同じファイル名を指定しても良い。

参考:
convertの使い方ImageMagickのサイト内)


画像を白地の矩形画像のままで貼っても良かったのだが、このweblogは背景が暗い色なので、その部分だけいやに白くなってしまうため、透過画像にした。
PNGの透過合成に対応しているブラウザでないと変に表示されてしまうが、ちょっと古めのMozillaでも正しく表示されたので、今後はまず大丈夫だろう。