例
コマンドラインで背景色を取り除きたい。
を
な感じにしたい。※
例えば、大量に白背景の画像を透明背景に変換しなくてはならない場合に便利。
コマンド
ImageMagick を使う。
convert input.png \
-alpha set \
-background none \
-channel RGBA \
-fill '#00000000' \
-fuzz 5% \
-draw 'matte 1,1 floodfill' \
output.png
-draw の行を読む通り、 1,1 の座標からペイントツールのバケツのように #00000000 (透明) で塗りつぶす。
-fuzz で塗りの曖昧さを調整できる。
注意
ImageMagick version 7 以降では matte
ではなく alpha
を指定する。
また、今後は convert
よりも magick
をプライマリのコマンドとして使用するほうが好ましいようである。
よって、次のようにする
magick input.png \
-alpha set \
-background none \
-channel RGBA \
-fill '#00000000' \
-fuzz 5% \
-draw 'alpha 1,1 floodfill' \
output.png
https://www.imagemagick.org/script/porting.php
https://github.com/ImageMagick/ImageMagick/issues/1687
ImageMagick のインストール方法
特に解説は不要だと思うけど念のため。
imagemagick というパッケージに含まれている事が多い。
パッケージマネージャからインストールすればいい。
OS X ユーザで Homebrew を利用している場合
$ brew install imagemagick
Debian 系
$ sudo apt-get install -y imagemagick
RHEL 系
$ sudo yum install ImageMagick
以下略。
失敗例
次のような単純な置換だとうまくいかない。
『全ての白色を透明に』するので、黒線の内側まで透明になってしまう。
これでは意図したものではない。
$ convert input200.png -fuzz 5% -transparent white output200_failed.png
脚注
※ 2 つめの画像は『透明』をわかりやすく表現するために PhotoShop 風のチェックタイルを背景にしているので、
実際にはウソがある。(本当に透明にすると白色と見分けがつかないので。)
ところで、このようなタイル背景は以下のように composite コマンドの pattern:checkerboard で合成できる。
$ composite -compose Dst_Over -tile pattern:checkerboard input.png output_tiled.png
参考
機能は多いので、しっかり読むと時間がすぐに融ける。
http://www.imagemagick.org/Usage/draw/
http://www.imagemagick.org/Usage/compose/