とある子育てパパの日記

とある子育てパパの日記です

2つの画像を重ねる / golang

画像にサイトロゴ画像を重ねる必要が出てきたので書いてみた。

やりたいこと

オリジナル画像にサイトロゴを重ねて合成する。

(まとめサイトなどに盗用されても出どころがわかるようにね。)

コード

package main

import (
    "fmt"
    "image"
    "os"

    "image/draw"
    "image/jpeg"
)

func main() {

    originImagePath := "/hogehoge/オリジナル画像.jpg"
    logoImagePath := "/hogehoge/ロゴ画像.jpg"
    saveImagePath := "/hogehoge/合成された画像.jpg"

    originFile, err := os.Open(originImagePath)
    if err != nil {
        fmt.Println(err)
    }
    logoFile, err := os.Open(logoImagePath)
    if err != nil {
        fmt.Println(err)
    }

    originImg, _, err := image.Decode(originFile)
    if err != nil {
        fmt.Println(err)
    }
    logoImg, _, err := image.Decode(logoFile)
    if err != nil {
        fmt.Println(err)
    }

    //オリジナル画像上のどこからlogoイメージを重ねるか
    //これだと左上
    startPointLogo := image.Point{0, 0}

    logoRectangle := image.Rectangle{startPointLogo, startPointLogo.Add(logoImg.Bounds().Size())}
    originRectangle := image.Rectangle{image.Point{0, 0}, originImg.Bounds().Size()}

    rgba := image.NewRGBA(originRectangle)
    draw.Draw(rgba, originRectangle, originImg, image.Point{0, 0}, draw.Src)
    draw.Draw(rgba, logoRectangle, logoImg, image.Point{0, 0}, draw.Over)

    out, err := os.Create(saveImagePath)
    if err != nil {
        fmt.Println(err)
    }

    var opt jpeg.Options
    opt.Quality = 100

    jpeg.Encode(out, rgba, &opt)
}

以上。