深入浅出Golang image库:编写高效的图像处理代码
package main
import (
"image"
"image/color"
"image/png"
"os"
)
// 创建一个新的灰度图像
func newGrayImage(width, height int) *image.Gray {
return image.NewGray(image.Rect(0, 0, width, height))
}
// 将图像转换为灰度
func toGray(img image.Image) *image.Gray {
gray := newGrayImage(img.Bounds().Dx(), img.Bounds().Dy())
for y := img.Bounds().Min.Y; y < img.Bounds().Max.Y; y++ {
for x := img.Bounds().Min.X; x < img.Bounds().Max.X; x++ {
gray.Set(x, y, color.GrayModel.Convert(img.At(x, y)))
}
}
return gray
}
// 保存图像到文件
func saveImage(img image.Image, filename string) error {
outFile, err := os.Create(filename)
if err != nil {
return err
}
defer outFile.Close()
return png.Encode(outFile, img)
}
func main() {
// 加载图像
srcImage, err := os.Open("example.png")
if err != nil {
panic(err)
}
defer srcImage.Close()
// 读取图像
img, _, err := image.Decode(srcImage)
if err != nil {
panic(err)
}
// 转换为灰度图像
grayImg := toGray(img)
// 保存图像
err = saveImage(grayImg, "gray_example.png")
if err != nil {
panic(err)
}
}
这段代码展示了如何使用Go语言的image库来完成图像的灰度转换和保存操作。首先,我们使用image.NewGray
创建一个新的灰度图像。然后,我们通过遍历原始图像的每一个像素,将其转换为灰度并设置到新图像中。最后,我们使用png.Encode
将处理后的图像保存到文件。这个过程展示了如何在Go中处理图像,并且是图像处理应用程序开发的一个基本示例。
评论已关闭