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

PIL Image.save results in incorrect pixel mapping

我正在尝试使用 pillow 从 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。

提前致谢。

"Shouldn't these values be identical?" 不。JPEG 是一种 lossy 格式 - 这意味着在保存时,Jpeg 编码库可以更改像素中的实际值 - 这可能因许多因素而异 - 所需的 jpeg 质量就是其中之一。

如果您将新图像保存为“.png”文件,但稍后将其与从原始 jpeg 图像读取的内容进行比较,值应该相同: 使用同一个库读取 jpeg 应该是确定性的(png 图像也应该如此)