はい、あります。Linuxではいくつか定番の方法があります。 一番有名なのは ImageMagick を使う方法です。
方法1 ImageMagick(業界標準)
ImageMagickは、Linuxの画像処理では「Photoshopのコマンドライン版」のような存在です。
インストール
Ubuntu/Debian
sudo apt install imagemagick
Fedora
sudo dnf install ImageMagick
例えば、
image.pngの四隅を丸くしたい場合。
角を10%程度丸める
画像サイズに対して10%なら、
convert image.png \
\( +clone -alpha extract \
-draw "fill black polygon 0,0 0,100 100,0 fill white circle 100,100 100,0" \
\) \
-alpha off \
-compose CopyOpacity -composite \
rounded.png
ただし、この例は固定サイズなので、実際には画像サイズに合わせて半径を計算した方が綺麗です。
ImageMagick 7なら
magick image.png \
\( -size %[fx:w]x%[fx:h] xc:none \
-fill white \
-draw "roundrectangle 0,0 %[fx:w-1],%[fx:h-1],50,50" \
\) \
-alpha off \
-compose CopyOpacity \
-composite \
rounded.png
方法2 Python + Pillow
Pythonならもっと簡単です。
from PIL import Image, ImageDraw
img = Image.open("image.png").convert("RGBA")
w, h = img.size
r = int(min(w, h) * 0.1)
mask = Image.new("L", (w, h), 0)
draw = ImageDraw.Draw(mask)
draw.rounded_rectangle((0,0,w,h), radius=r, fill=255)
img.putalpha(mask)
img.save("rounded.png")
半径を
画像の短辺 × 10%としているので、どんなサイズでも自然になります。
方法3 ffmpeg
動画業界では ffmpeg のフィルターでもできます。
ffmpeg -i image.png \
-vf "geq=lum='p(X,Y)':a='if(gt(hypot(...),...),0,255)'" \
rounded.png
ただし式が非常に長くなるので、静止画ならImageMagickの方が圧倒的に楽です。
方法4 SVGマスク
Web業界ではSVGがよく使われます。
HTMLなら
border-radius:10%;
だけで済みます。
10%とは何か?
実は「10%」にも流派があります。
CSS派
border-radius:10%;
幅・高さから割合で計算します。
デザイナー派
FigmaやSketchでは
半径 = 画像短辺 × 10%で考えることが多いです。
ImageMagick派
ImageMagickには「10%」という指定はなく、
radius = ピクセルで指定します。
そのため
半径 = min(width,height) × 0.1へ変換して使います。
業界話
昔(1990年代〜2000年代前半)は、角丸画像を作るにはPhotoshopで毎回加工していました。
その後、
- CSS3
- SVG
- PNGのアルファチャンネル
が普及し、「画像自体を丸める」のではなく「表示時に丸める」のが一般的になりました。
現在でも画像そのものを丸めるケースは、
- YouTubeサムネイル生成
- AI画像の前処理
- ECサイトの商品画像
- SNSアイコン生成
など、自動生成パイプラインでよく見られます。
雑学
実はAppleが初代iPhoneを発表した2007年頃から、「角丸デザイン」が世界的なトレンドになりました。iOSのアイコンやボタンが角丸だった影響は大きく、その後Android、Windows、Webデザインにも広まりました。
さらに面白いのは、人間は鋭い角を「危険」「硬い」と感じやすく、丸い角を「安全」「親しみやすい」と感じる傾向が心理学やUIデザインで知られています。そのため、現代のアプリやWebサイトでは角丸が標準的なデザインとなっています。
Linuxで一番おすすめの方法
汎用性・速度・スクリプト化のしやすさを考えると、ImageMagick が最もおすすめです。シェルスクリプトから大量の画像を一括処理しやすく、半径を「画像の短辺の10%」として計算すれば、画像サイズが変わってもバランスの良い角丸を自動で適用できます。
0 件のコメント:
コメントを投稿