Go JPEG画像の色反転

練習がてらGo言語でJPEG画像の色を反転しました

1. 使用した画像

元のギターの画像
無料写真素材 写真AC https://www.photo-ac.com/main/detail/2480449?title=%E5%AD%90%E4%BE%9B%E7%94%A8%E3%82%A2%E3%82%B3%E3%83%BC%E3%82%B9%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF%E3%82%AE%E3%82%BF%E3%83%BC

2. ソースコード

package main

import (
    "image"
    "image/color"
    "image/jpeg"
    "log"
    "os"
)

func main() {
    // Open JPEG
    file, err := os.Open("guitar.jpg")
    defer file.Close()
    if err != nil {
        log.Fatal(err)
    }

    // Decode jpeg
    img, _, err := image.Decode(file)
    if err != nil {
        log.Fatal(err)
    }

    // Bound, RGBA
    imgBound := img.Bounds()
    out := image.NewRGBA(imgBound)

    // Reverse Process
    rect := out.Rect // RGBA -> Rectangle
    for y := rect.Min.Y; y < rect.Max.Y; y++ {
        for x := rect.Min.X; x < rect.Max.X; x++ {
            r, g, b, a := img.At(x, y).RGBA()
            r, g, b, a = r>>8, g>>8, b>>8, a>>8
            out.Set(x, y, color.RGBA{
                uint8(255 - r),
                uint8(255 - g),
                uint8(255 - b),
                255})
        }
    }

    outFile, err := os.Create("guitar_reversed.jpg")
    defer outFile.Close()
    if err != nil {
        log.Fatal(err)
    }

    // Encode jpeg
    if err := jpeg.Encode(outFile, out, nil); err != nil {
        log.Fatal(err)
    }
}

3. 結果

色反転後のギターの画像

4. 参考

https://golang.org/pkg/os/


https://golang.org/pkg/image/