我是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)]


最后打印应与第二张相同。

谁能向我解释为什么?谢谢!

最佳答案

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

关于python - 枕头-更改每个像素的RGB值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56726604/

10-12 05:34