3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

コマンド一発で画像を角丸にする

Posted at

ちまたでも色々やってる人いるみたいだけど一々この為だけにマスク画像とか用意してられないし一発でなんとかしたい。

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

3
2
1

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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?