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位图
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)
}
//以png的格式保存文件
imgfile, err := os.Create("family.png")
if nil != err{
log.Fatal(err)
}
err = png.Encode(imgfile, rgba)
if nil !=err {
log.Fatal(err)
}
}
go语言实现图像的灰度化
猜你喜欢
转载自blog.csdn.net/zhuiyunzhugang/article/details/121214205
今日推荐
周排行