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