1. 灰度化图片
在进行灰度化之前,我们需要了解一下图片的色彩模式。常见的图片色彩模式有RGB和灰度两种。RGB(红绿蓝)是三原色模式,每个像素点都是由三个颜色通道组成,每个通道颜色范围为0~255,代表了红、绿、蓝三个颜色的强度。而灰度模式则是一种只有灰度值的图像模式,每个像素点只有一个颜色通道,颜色范围为0~255,代表了黑到白的灰度程度。
下面是灰度化图片的代码:
package main
import (
"image"
"image/color"
"image/jpeg"
"os"
"golang.org/x/image/draw"
)
func main() {
// 读取原图片
file, err := os.Open("test.jpg")
if err != nil {
panic(err)
}
defer file.Close()
img, err := jpeg.Decode(file)
if err != nil {
panic(err)
}
// 将原始图片转换为灰度图
grayImg := image.NewGray(img.Bounds())
draw.Draw(grayImg, grayImg.Bounds(), img, image.ZP, draw.Src)
// 保存转换后的图片
outputFile, err := os.Create("gray_test.jpg")
if err != nil {
panic(err)
}
defer outputFile.Close()
jpeg.Encode(outputFile, grayImg, &jpeg.Options{Quality: 100})
}
首先,我们需要使用image包的Decode函数读取原图片。然后使用NewGray函数创建一张空的灰度图像,在使用draw包的Draw函数将原图片复制到灰度图像上。最后,使用jpeg包的Encode函数将转换后的灰度图保存到文件中。
需要注意的是,在实际操作中,我们需要根据具体的需求来选择图片的色彩模式。如果需要对色彩进行处理,那么RGB模式是更好的选择。如果只需要处理亮度或者灰度程度,那么灰度模式则更为适合。
2. 亮度调整
2.1 调整亮度算法
调整亮度的本质是将每个像素点的RGB通道值都进行加减操作,而不改变颜色的分布方式。具体地,对于一个RGB值为(r,g,b)的像素点,我们定义一个实数值delta来表示需要调整的亮度程度,代码如下:
func adjustBrightness(c color.RGBA, delta float64) color.RGBA {
r := uint8(float64(c.R) * delta)
g := uint8(float64(c.G) * delta)
b := uint8(float64(c.B) * delta)
return color.RGBA{r, g, b, c.A}
}
在颜色值的计算中,我们将delta与原始颜色分量相乘作为新的颜色分量。
2.2 图片亮度调整
现在,我们可以使用go语言代码来实现图片的亮度调整了。代码如下:
package main
import (
"image"
"image/color"
"image/jpeg"
"os"
)
func main() {
// 读取原图片
file, err := os.Open("test.jpg")
if err != nil {
panic(err)
}
defer file.Close()
img, err := jpeg.Decode(file)
if err != nil {
panic(err)
}
// 调整亮度
adjustedImg := image.NewRGBA(img.Bounds())
for x := 0; x < img.Bounds().Dx(); x++ {
for y := 0; y < img.Bounds().Dy(); y++ {
c := color.RGBAModel.Convert(img.At(x, y)).(color.RGBA)
adjusted := adjustBrightness(c, 1.2)
adjustedImg.Set(x, y, adjusted)
}
}
// 保存调整后的图片
outputFile, err := os.Create("brightness_test.jpg")
if err != nil {
panic(err)
}
defer outputFile.Close()
jpeg.Encode(outputFile, adjustedImg, &jpeg.Options{Quality: 100})
}
对于每个像素点,我们先将图片颜色转换为color.RGBA类型,然后调用adjustBrightness函数进行亮度调整,最后调用Set函数将新颜色设置到调整后的图片中。
需要注意的是,在实际操作中,我们需要根据需要进行适当的亮度调整。过高的亮度会导致图像过度曝光,影响观感。所以为了保证图像美观,我们需要选择适当的亮度调整程度。