package main import ( "image" "image/color" ) func convertToGray(path string) error { src, err := decodeImage(path) if err != nil { return err } bounds := src.Bounds() dst := image.NewRGBA(bounds) for y := bounds.Min.Y; y < bounds.Max.Y; y++ { for x := bounds.Min.X; x < bounds.Max.X; x++ { c := src.At(x, y) rgba := color.NRGBAModel.Convert(c).(color.NRGBA) if rgba.A > 0 { gray := color.GrayModel.Convert(c).(color.Gray) rgba.R, rgba.G, rgba.B = gray.Y, gray.Y, gray.Y dst.Set(x, y, rgba) } else { dst.Set(x, y, c) } } } return encodePNG(path, dst) }