動かざることバグの如し

近づきたいよ 君の理想に

ImageMagickで上下左右自在に余白を追加する方法

環境

やりたいこと

ImageMagickで画像の上下左右に余白を追加したい

オプションとしては -gravityでできる。重力。。?と思うが実際に画像結果を見ると実感できると思う。

色々できるのが便利だが、結構クセが強い。

ここではサンプル画像の変換結果を記載していく

サンプル画像

512x512pxの画像

picture 10

northwest

convert input.png -gravity northwest -background blue -extent 612x612 output_northwest.png

picture 1

west

picture 2

southwest

picture 3

north

picture 4

center

picture 5

east

picture 6

southeast

picture 7

south

picture 8

  • 余白を付けるときのgravityオプションは、画像のどの方向に余白を追加するかを指定する機能。
  • -gravityオプションは、-extentオプションやその他のgeometry引数を取るオプションと一緒に使われる。
  • -extentオプションで指定したサイズに対して、-gravityオプションで指定した基準点に画像を配置する
  • -geometryオプションでオフセットを指定することで、余白の幅を調整できる

画像サイズは同じまま余白を付けたい場合

元画像と解像度を一致させたい場合はgravityではなくborderを使う。

convert input.png -gravity SouthEast -background blue -splice 100x100 -resize 512x512 output.png

一見分かりづらいが512x512pxのままである。

picture 11

検証シェルスクリプト

#!/bin/bash

image="input.png"

# 余白を追加する方向の配列
gravity=("northwest" "west" "southwest" "north" "center" "east" "southeast" "south")

# 画像の幅と高さを取得
width=$(identify -format "%w" "$image")
height=$(identify -format "%h" "$image")

# 余白の大きさ
margin=100

# 余白を追加した後の幅と高さ
new_width=$((width + margin))
new_height=$((height + margin))

# extentオプションの値
extent="${new_width}x${new_height}"

# 背景色
background="blue"

# forループで各方向に余白を追加する
for g in "${gravity[@]}"; do
  # 出力ファイル名
  output="output_${g}.png"
  # convertコマンドで画像変換
  # echo convert "$image" -gravity "$g" -background "$background" -extent "$extent" "$output"
  convert "$image" -gravity "$g" -background "$background" -extent "$extent" "$output"
done

参考リンク