ちまたでも色々やってる人いるみたいだけど一々この為だけにマスク画像とか用意してられないし一発でなんとかしたい。
convert -size 512x512 xc:none -draw "roundrectangle 0,0 511,511 20,20" src.png -resize 512x512 -compose src-in -composite -unsharp 0x1 dst.png
src.png が元画像、dst.png が出力先。512 とか 511(0 座標から計算する為 -1) の箇所は出力画像の縦横で、適当によしなにやります。どうせこんなことする人は「iOS 用の角のあるアイコンを Android でも使いたいんですよ」とかいう要望に応えることになった可哀想な人なので 512 の需要があると思う。20,20 が角丸の角度的なアレです。鮮鋭化 -unsharp 0x1
はお好みで。
補足と余談
php のライブラリ Imagick だと Imagick::roundCorners()
というズバリそのもののメソッドがある。
ruby で MiniMagick を使うとこんなところでしょうか。
require 'mini_magick'
MiniMagick::Tool::Convert.new do |c|
c.size "512x512"
c << "xc:none"
c.draw "roundrectangle 0,0 511,511 20,20"
c << "src.png"
c.resize "512x512"
c.compose "src-in"
c.composite
c << 'dst.png'
end
とにかく ImageMagick のオプションはどれがどれにかかるのか分かり辛く、ただこれだけの為に膨大なドキュメントを読む気もせず、未だに組み上がったものを完璧に理解は出来ていないので、ImageMagick 芸人の方がいたら改善して欲しい。composite とか mogrify コマンドを使用したほうが適切なんじゃないかと思ってるけどマスク側の描画が出来そうになかったので挫折した。
あと真っ白な画像に対して処理すると分かり易いが、角を丸めたところに微妙に線が残る場合がある。画像によっては全く目立たないこともあるがなんとも言えない。マスク画像を用意してやっている記事等を見ると残っておらず、回避する方法もありそうだけど編み出せなかった。
参考
http://kyle-in-jp.blogspot.jp/2007/10/imagemagick_27.html
http://www.imagemagick.org/Usage/compose/#copyopacity
http://www.imagemagick.org/Usage/compose/#dstin
http://kawa.at.webry.info/201011/article_3.html