説明
					JPEG画像をグレー画像に変換した後、PNG形式で保存するには必要なパッケージを読み込ませます。osパッケージのOpen()メソッドを使って読み込むJPEG形式の画像があるパスを指定し開きます。無事に開くことができたら、imageパッケージのDecode()メソッドを使ってJPEG画像を展開(デコード)します。
					次に画像と同じサイズの四角形を作成しDraw()メソッドを使ってJPEG画像を描画します。描画した画像のピクセルをAt()メソッドとRGBA()メソッドを使って読み出します。At()メソッドで座標を指定し、RGBA()メソッドで赤緑青α(不透明度)を一括して読み出します。グレースケール画像にするには「緑の輝度×0.59 + 赤の輝度×0.3 + 青の輝度×0.11」として計算します。計算した値を赤緑青の輝度として書き戻します。ピクセル情報を書き込むにはSet()メソッドを使います。これを全ピクセル数分繰り返します。
					画像の書類が終わったらにPNG画像の保存先とファイル名をCreate()メソッドを使って生成します。ファイルが正常に作成されたらjpegパッケージのEncode()メソッドを使って画像を保存します。
				
			
					
					
package main
import (
	"fmt"
	"image"
	"os"
	"image/color"
	"image/draw"
	"image/png"
	_ "image/jpeg"
)
func main() {
	// 開くファイル名
	file, err := os.Open("/images/test.jpg")
	if err != nil {
		fmt.Println("ファイルが開けませんでした。")
		os.Exit(1)
	}
	defer file.Close()
	// JPEG画像を解析(デコード)する
	m, _, err := image.Decode(file)
	if err != nil {
		fmt.Println("画像を解析できませんでした。")
		os.Exit(1)
	}
	// 画像サイズの四角形を生成
	myImage := image.NewRGBA(m.Bounds())
	// 黒色で四角形を描画
	draw.Draw(myImage, myImage.Bounds(), m, image.Point{0, 0}, draw.Src)
	// グレースケールにする処理
	// 画像の幅を取得する
	bounds := m.Bounds()
	// 縦幅の数だけ繰り返す
	for y := bounds.Min.Y; y<bounds.Max.Y; y++ {
		// 横幅の数だけ繰り返す
		for x := bounds.Min.X; x<bounds.Max.X; x++ {
			// ピクセルの輝度を読み出し
			r, g, b, a := myImage.At(x, y).RGBA()
			// グレースケールの値を計算する
			gray := float64(g & 0xff)*0.59 + float64(r & 0xff)*0.3 + float64(b & 0xff)*0.11
			// ピクセル値を書き込み
			myImage.Set(x, y, color.RGBA{uint8(gray), uint8(gray), uint8(gray), uint8(a)})
		}
	}
	// 保存するファイル名
	savefile, err := os.Create("/images/test_gray1.png")
	if err != nil {
		fmt.Println("保存するためのファイルが作成できませんでした。")
		os.Exit(1)
	}
	defer savefile.Close()
	// PNG形式で保存する
	png.Encode(savefile, myImage)
}