つくったもの
以下のように,1. 背景画像,2. テキスト,3. 出力先 を指定すると,
>>> googp background.jpg "なぜなのか やたらと臭う バスタオル" output.png
このような画像を生成するコマンドを作った.
この一枚の画像は,
- 背景画像
- 黒の半透明のブロック
- 文字列 から構成されている.
作ろうと思ったときに Go で書くのは大変なのかなと思ったが,fogleman/gg を使ったら簡単にできた.
詳細
fogleman/gg
で作る,gg.Context
にぺたぺたと画像やテキストをのっけていく感じ.
dc := gg.NewContext(1200, 628) // このベースにぺたぺたしていく
// ...
backgroundImage, err := gg.LoadImage("/path/to/img") // gg を使って画像を読み込んだら.
dc.DrawImage(backgroundImage, 0, 0) // ベースにのっける.
// ...
fontPath := "./data/font/MPLUS1p-ExtraBold.ttf" // font を読み込んで.
if err := dc.LoadFontFace(fontPath, 90); err != nil { // font size はここで指定.
panic(errors.Wrap(err, "load font"))
}
dc.SetColor(color.White) // フォント色を指定して,
s := "なぜなのか やたらと臭う バスタオル"
maxWidth := float64(dc.Width())
dc.DrawStringWrapped(s, 50, 200, 0, 0, maxWidth/2, 1.5, gg.AlignLeft) // ベースにのっける
他にもいくつかの画像 or テキストを足したかったら,この作業を繰り返すだけで良い. トリミングやリサイズも簡単にできるので,簡単な OGP の生成ならどんどん自動化していけそう.
パラメーターをハードコーディングしている箇所もあるので,今後はその辺の整理をして少なくとも自分のブログ価値のあるものにしたい.
参考