LoginSignup
47
41

More than 1 year has passed since last update.

ImageMagick で画像のフチの背景色を切り取って透明に

Last updated at Posted at 2015-05-10

コマンドラインで背景色を取り除きたい。

input200.png

output200_tile.png

な感じにしたい。※

例えば、大量に白背景の画像を透明背景に変換しなくてはならない場合に便利。

コマンド

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 を利用している場合

OSX
$ brew install imagemagick

Debian 系

APT
$ sudo apt-get install -y imagemagick

RHEL 系

Yum
$ sudo yum install ImageMagick

以下略。

失敗例

次のような単純な置換だとうまくいかない。
『全ての白色を透明に』するので、黒線の内側まで透明になってしまう。
これでは意図したものではない。

$ convert input200.png -fuzz 5% -transparent white output200_failed.png

output200_failed_tile.png

脚注

※ 2 つめの画像は『透明』をわかりやすく表現するために PhotoShop 風のチェックタイルを背景にしているので、
実際にはウソがある。(本当に透明にすると白色と見分けがつかないので。)

ところで、このようなタイル背景は以下のように composite コマンドの pattern:checkerboard で合成できる。

add-tile
$ composite -compose Dst_Over -tile pattern:checkerboard input.png output_tiled.png

参考

機能は多いので、しっかり読むと時間がすぐに融ける。

http://www.imagemagick.org/Usage/draw/
http://www.imagemagick.org/Usage/compose/

47
41
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
47
41