gpt4 book ai didi

image - 更改像素值,保存并再次读取返回原始颜色

转载 作者:行者123 更新时间:2023-12-01 22:20:16 27 4
gpt4 key购买 nike

如果等于 20,我想将像素的所有蓝色值更改为 255。
我读取源图像,将其绘制为新的 image.RGBA,以便我可以修改像素。
但是,当我获取输出图像(在执行程序之后)并将其作为输入提供,并在 IF block 内放置一个调试点,并在 Debug模式下运行程序时,我看到调试器在多点停止在那里。这意味着,我没有正确修改图像。
谁能告诉我,如何修改像素并正确保存?非常感谢

func changeOnePixelInImage() {
imgPath := "./source.png"
f, err := os.Open(imgPath)
check(err)
defer f.Close()
sourceImage, _, err := image.Decode(f)

size := sourceImage.Bounds().Size()
destImage := image.NewRGBA(sourceImage.Bounds())
draw.Draw(destImage, sourceImage.Bounds(), sourceImage, image.Point{}, draw.Over)

for x := 0; x < size.X; x++ {
for y := 0; y < size.Y; y++ {
pixel := sourceImage.At(x, y)
originalColor := color.RGBAModel.Convert(pixel).
(color.RGBA)

b := originalColor.B

if b == 20 {
b = 255 // <--- then i swap source and destination paths, and debug this line
}

c := color.RGBA{
R: originalColor.R,
G: originalColor.G,
B: b,
A: originalColor.A,
}
destImage.SetRGBA(x, y, c)
}
}
ext := filepath.Ext(imgPath)
newImagePath := fmt.Sprintf("%s/dest%s", filepath.Dir(imgPath), ext)
fg, err := os.Create(newImagePath)
check(err)
defer fg.Close()
err = jpeg.Encode(fg, destImage, &jpeg.Options{100})
check(err)
}

最佳答案

我找到了我的问题的答案。
问题是,我正在解码 jpeg 图像,我从这个 stackoverflow 问题中发现 JPEG 图像质量下降(因此,像素值在此过程中被修改):Is JPEG lossless when quality is set to 100?
所以,我应该使用 PNG 图像。(即使我使用 source.png 作为源图像,它实际上是 jpg 图像:/)
所以我将最后几行更改为:

if ext != ".png" {
panic("cannot do my thing with jpg images, since they get compressed")
}
err = png.Encode(fg, destImage)

关于image - 更改像素值,保存并再次读取返回原始颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63949780/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com