package main
import (
"fmt"
"image"
"image/color"
"image/gif"
_ "image/gif"
"image/jpeg"
_ "image/jpeg"
"image/png"
_ "image/png"
"log"
"os"
"strings"
)
func grayingImage(m image.Image) *image.RGBA {
bounds := m.Bounds()
dx := bounds.Dx()
dy := bounds.Dy()
newRgba := image.NewRGBA(bounds)
for x := 0; x < dx; x++ {
for y := 0; y < dy; y++ {
colorRgb := m.At(x, y)
_, g, _, a := colorRgb.RGBA()
newG := uint8(g >> 8)
newA := uint8(a >> 8)
newRgba.SetRGBA(x, y, color.RGBA{
R: newG, G: newG, B: newG, A: newA})
}
}
return newRgba
}
func imageEncode(fileName string, file *os.File, rgba *image.RGBA) error {
stringSlice := strings.Split(fileName, ".")
switch stringSlice[len(stringSlice)-1] {
case "jpg":
return jpeg.Encode(file, rgba, nil)
case "jpeg":
return jpeg.Encode(file, rgba, nil)
case "gif":
return gif.Encode(file, rgba, nil)
case "png":
return png.Encode(file, rgba)
default:
panic("不支持的图片类型")
}
}
func main() {
imagePath := "C:\\Users\\wg\\go\\src\\学习go语言\\预处理\\家人们.png"
file, _ := os.Open(imagePath)
defer file.Close()
img, _, err := image.Decode(file)
if err != nil {
fmt.Println( err)
return
}
b1 := img.Bounds()
img1Width := b1.Max.X
img1Height := b1.Max.Y
fmt.Println(img)
fmt.Printf("%s", file.Name())
fmt.Printf("%d %d",img1Width, img1Height)
rect:=image.Rect(0, 0, img1Width, img1Height)
rgba := image.NewNRGBA(rect)
for j:=0;j<img1Width;j++{
for k:=0;k<img1Height;k++{
rgba.Set(k,j,color.RGBA{
uint8(k % 256), uint8(j % 256), 0, 255})
}
}
graychange := grayingImage(img)
newFileName := "灰度.png"
outFile, _ := os.Create(newFileName)
defer outFile.Close()
if err := imageEncode(newFileName, outFile, graychange); err != nil {
panic(err)
}
imgfile, err := os.Create("family.png")
if nil != err{
log.Fatal(err)
}
err = png.Encode(imgfile, rgba)
if nil !=err {
log.Fatal(err)
}
}