我正在尝试使用枕头从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。
提前致谢。
答案 0 :(得分:1)
"这些值是否应该相同?" 不是.JPEG是lossy格式 - 这意味着在保存时,Jpeg编码库可以更改像素中的实际值 - 这可能因许多因素而变化 - 所需的jpeg质量就是其中之一。
如果您将新图像保存为" .png"虽然文件 - 稍后将其与从原始jpeg图像中读取的内容进行比较,但值应该相同: 阅读具有相同库的jpeg应该是确定性的(png图像也应如此)