Go言語でpng画像にimageパッケージを使用して枠線をつけてみます。
下記のpng画像に赤枠をつけてみます。
画像に枠線をつけるコード #
下記のコードはpng画像を読み込み、赤枠線をつけて別画像として保存するコードです。
package main
import (
"image"
"image/color"
"image/draw"
"image/png"
"os"
)
func main() {
picPath := "shape.png"
savePath := "shape_frame.png"
err := addPictureFrame(picPath, savePath)
if err != nil {
panic(err)
}
}
func addPictureFrame(picPath, savePath string) error {
file, err := os.Open(picPath)
if err != nil {
return err
}
defer file.Close()
img, _, err := image.Decode(file)
if err != nil {
return err
}
bounds := img.Bounds()
// image.Imageのままだと編集できないので、image.RGBAに変換する
m := image.NewRGBA(image.Rect(0, 0, bounds.Dx(), bounds.Dy()))
draw.Draw(m, m.Bounds(), img, bounds.Min, draw.Src)
// 赤色で枠線を描画する
c := color.RGBA{255, 0, 0, 255}
drawBounds(m, c)
output, err := os.Create(savePath)
if err != nil {
return err
}
defer output.Close()
png.Encode(output, m)
return nil
}
func drawBounds(img *image.RGBA, c color.Color) {
// 枠線の幅
paintRange := 10
for x := 0; x < img.Rect.Max.X; x++ {
for offset := 0; offset < paintRange; offset++ {
img.Set(x, 0+offset, c) // 画像の上側
img.Set(x, img.Rect.Max.Y-1-offset, c) // 画像の下側
}
}
for y := 0; y < img.Rect.Max.Y; y++ {
for offset := 0; offset < paintRange; offset++ {
img.Set(0+offset, y, c) // 画像の左側
img.Set(img.Rect.Max.X-1-offset, y, c) // 画像の右側
}
}
}
コードを実行すると下記のように赤枠がついた画像が生成されます。
参考サイト #
go - Convert image.Image to image.NRGBA - Stack Overflow
golangで画像を扱う(imageパッケージを使う) - write ahead log