MiniMagickを使って、画像を生成してみました。
用意した画像
- ベース画像
- ユーザー画像
- フォントファイル
やったこと
- アイコン画像を丸く切り抜く
Convertメソッドを使い、既存画像を読み込み加工をして出力します。
# ユーザー画像を元に新しい画像を生成する # 円状に切り抜く # 新しい画像は `out_put.png` に出力される user_image = MiniMagick::Image.open({ユーザー画像パス}) MiniMagick::Tool::Convert.new do |img| img.size "#{user_image.height}x#{user_image.width}" img << 'xc:transparent' img.fill user_image.path img.draw 'translate 150, 150 circle 0,0 150,0' img.trim img << 'out_put.png' end
- ベース画像に切り抜いた画像を合成する
Compositeメソッドを使い、ベース画像に先程出力した画像を上に重ねます。
画像の起点や起点からの位置を指定します。
# ユーザーアイコンを合成する # ベース画像の上にユーザー画像重ねる # 起点は左上としました(NorthWest) # 起点からの位置を指定 base_image = MiniMagick::Image.open({ベース画像パス}) result = base_image.composite(MiniMagick::Image.open('out_put.png')) do |config| config.compose 'Over' config.gravity 'NorthWest' config.geometry '+90+80' end
- 合成した画像にさらにテキストを合成する
合成した画像にテキストを描画して合成する
CSSと同じ要領で色・フォントサイズを指定します。
今回は中央に配置しました。
result.combine_options do |config| config.font {フォントファイルパス} config.fill '#333333' config.gravity 'center' config.pointsize 65 config.draw "text 0.0 'テキスト合成'" end
結果
このようになりました。
MiniMagickを使って合成画像を生成することで、OGPをいい感じに作ることができると思います。