PIL Image.save导致像素映射不正确

时间:2015-03-12 17:20:33

标签: python python-imaging-library

我正在尝试使用枕头从JPEG中读取数据,然后将其保存为新图像,但是,当我从新保存的图像中读取数据时,它与原始数据不对应!

这是脚本:

from PIL import Image

im1 = Image.open("original.jpg")
data1 = list(im1.getdata())

newim = Image.new("RGB", im1.size)
newim.putdata(data1)
newim.save("new.jpg")

im2 = Image.open("new.jpg")
data2 = list(im2.getdata())

for i in range(10):
    print data1[i], data2[i]

运行之后,输出为:

(113, 191, 255) (114, 189, 254)
(113, 191, 255) (114, 189, 254)
(112, 190, 254) (114, 189, 254)
(112, 190, 254) (114, 189, 254)
(112, 190, 254) (114, 189, 254)
(112, 190, 254) (114, 189, 254)
(112, 190, 254) (114, 189, 254)
(112, 190, 254) (114, 189, 254)
(113, 191, 255) (115, 190, 255)
(113, 191, 253) (115, 190, 255)

这些值不应该相同吗?

我正在使用python 2.7.9,枕头2.7.0。

提前致谢。

1 个答案:

答案 0 :(得分:1)

"这些值是否应该相同?" 不是.JPEG是lossy格式 - 这意味着在保存时,Jpeg编码库可以更改像素中的实际值 - 这可能因许多因素而变化 - 所需的jpeg质量就是其中之一。

如果您将新图像保存为" .png"虽然文件 - 稍后将其与从原始jpeg图像中读取的内容进行比较,但值应该相同: 阅读具有相同库的jpeg应该是确定性的(png图像也应如此)