我是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/