🐥
Goを使った画像のサイズ変更
画像オブジェクト取得
標準の image
パッケージを利用しても良いですが、EXIF等の対応を良い感じにしてくれる下記ライブラリを使うのが楽です。
リサイズ
rImg := resize.Resize(width, height, img, resize.Bilinear)
再生成
imgBuf := new(bytes.Buffer)
// jpg
err = jpeg.Encode(imgBuf, rImg, &jpeg.Options{
Quality: 80,
})
// png
err = png.Encode(imgBuf, rImg)
// gif
err = gif.Encode(imgBuf, rImg, nil)
おまけ: 支配色(ドミナントカラー)の取得
サムネ表示等で背景色を画像の色に合わせたいとかよくあるかと思います。
そんなときに便利な処理です。
func (s *Service) getDominantColor(img image.Image) color.RGBA {
var r, g, b, count float64
rect := img.Bounds()
for i := 0; i < rect.Max.Y; i++ {
for j := 0; j < rect.Max.X; j++ {
c := color.RGBAModel.Convert(img.At(j, i))
r += float64(c.(color.RGBA).R)
g += float64(c.(color.RGBA).G)
b += float64(c.(color.RGBA).B)
count++
}
}
return color.RGBA{
R: uint8(r / count),
G: uint8(g / count),
B: uint8(b / count),
}
}
Discussion