メインコンテンツへスキップ
【Golang】png画像に枠線をつける

【Golang】png画像に枠線をつける

·1 分
Programming Golang
かずさプログラマー
著者
かずさプログラマー
業務の作業自動化を行っています。Go、VBA、Pythonを主に使用しています。過去にはC#、VB.Net、JavaScriptも使用していました。
目次

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) // 画像の右側
		}
	}
}

コードを実行すると下記のように赤枠がついた画像が生成されます。

参考サイト
#

関連記事

【Golang】zip内のファイル一覧を展開せずに取得する
··2 分
Programming Golang
【Golang】Collyを使用してWebスクレイピングを行う
··5 分
Programming Golang
Robotgoで指定範囲のキャプチャーを連続で取得する
·1 分
Programming Golang