Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 更改像素值,保存并再次读取将返回原始颜色_Image_Go_Draw - Fatal编程技术网

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

Image 更改像素值,保存并再次读取将返回原始颜色,image,go,draw,Image,Go,Draw,我想将像素的所有蓝色值更改为255,如果它等于20。 我读取源图像,绘制。将其绘制到new image.RGBA,以便修改像素 但是,当我获取输出图像(在执行程序之后)并将其作为输入输入,将调试点放在IF块内,并以调试模式运行程序时,我看到在多个点中调试器停止在那里。这意味着,我没有正确地修改图像 谁能告诉我,如何修改像素并正确保存?非常感谢 func changeOnePixelInImage(){ imgPath:=“/source.png” f、 错误:=os.Open(imgPath)

我想将像素的所有蓝色值更改为255,如果它等于20。 我读取源图像,绘制。将其绘制到new image.RGBA,以便修改像素

但是,当我获取输出图像(在执行程序之后)并将其作为输入输入,将调试点放在IF块内,并以调试模式运行程序时,我看到在多个点中调试器停止在那里。这意味着,我没有正确地修改图像

谁能告诉我,如何修改像素并正确保存?非常感谢

func changeOnePixelInImage(){
imgPath:=“/source.png”
f、 错误:=os.Open(imgPath)
检查(错误)
延迟f.关闭()
sourceImage,\ux,err:=image.Decode(f)
大小:=sourceImage.Bounds().size()
destImage:=image.NewRGBA(sourceImage.Bounds())
draw.draw(destImage,sourceImage.Bounds(),sourceImage,image.Point{},draw.Over)
对于x:=0;x我找到了我问题的答案。
问题是,我正在解码jpeg图像,我从这个问题中发现jpeg图像会丢失质量(因此,在此过程中像素值会被修改):

所以,我应该使用PNG图像(即使我使用
source.PNG
作为源图像,它实际上是jpg图像:/)

因此,我将最后一行更改为:

如果ext!=“.png”{
恐慌(“无法处理jpg图像,因为它们被压缩了”)
}
err=png.Encode(前景,目标图像)

我查看了jpeg.Encode的源代码,不太明白,但它似乎可以根据jpeg.Options.Quality缩放图像。这就是为什么我将is设置为100(最大值),认为如果不是100,可能是压缩图像