枕头-更改每个像素的RGB值

时间:2019-06-23 18:11:28

标签: python python-imaging-library

我是python的新手,正在尝试学习pil。我想将每个像素的rgb值降低1。例如(100,239,54)应该是(99,238,53)。但是,一旦图片被保存,就没有我保存的像素值。但也与原始图片不一样。

from PIL import Image 

img = Image.open('dog2.jpg', 'r') 
imgdata = list(img.getdata())
print(imgdata[:5])

imgdata = [val for sublist in imgdata for val in sublist]
for i, pixbit in enumerate(imgdata):
    imgdata[i] -= 1
imgdata = list(zip(*[iter(imgdata)]*3))

print(imgdata[:5])

newimg = Image.new(img.mode, img.size)
newimg.putdata(imgdata)
newimg.save('newimg.jpg')

img = Image.open('newimg.jpg', 'r')
print(list(img.getdata())[:5])

三个打印件:

[(36, 79, 86), (36, 79, 86), (36, 79, 86), (36, 79, 86), (37, 80, 87)]
[(35, 78, 85), (35, 78, 85), (35, 78, 85), (35, 78, 85), (36, 79, 86)]
[(36, 79, 88), (36, 79, 88), (36, 79, 88), (36, 79, 88), (36, 79, 88)]

最后一张应该与第二张相同。

有人可以向我解释为什么吗?谢谢!

1 个答案:

答案 0 :(得分:1)

JPEG是一种有损压缩格式,这意味着您不应期望检索与您保存的像素完全相同的像素值。如果您想要确切的值,则可以尝试使用PNG