PIL在保存时更改像素值

Eth*_*han 6 python image save python-imaging-library

这很简单.制作RGB图像,一个像素大.将像素值设置为(a,b,c).保存.问题是,保存的图像具有与(a,b,c)不同的像素值.通常,在其中一个通道上使用+ -1,就好像它是随机噪声,但它的一致性.下面是代码:

from PIL import Image
newImg = Image.new('RGB', (1,1), "black")
pixels = newImg.load()
pixels[0,0] = (0,3,0)
newImg.save("point.jpg")
savedImage = Image.open("point.jpg")
pixelsSaved = savedImage.load()

print pixels[0,0]
print pixelsSaved[0,0]
Run Code Online (Sandbox Code Playgroud)

这个输出是:(0,3,0)(1,3,0)

一致.

如果我使用(4,2,0)作为要保存的像素,则输出为:(4,2,0)(3,2,0)

和(0,10,0)给出:(0,10,0)(0,10,1)

例如.

为什么保存时价值会发生变化?我该如何预防呢?请帮忙.

谢谢.

Ned*_*der 8

JPG 不承诺精确存储您想要的像素。它压缩您的数据以使文件更小,并且压缩基于人类感知。这个想法是创建一个对人类来说看起来相同的像素阵列,即使它们是不同的像素。

因此,您正在写入的像素在输出中,但相邻像素已被更改,以便能够在更小的空间中存储整个图像。这称为“有损压缩”,因为数据会丢失。

其他图像格式没有这个属性。PNG 是一种无损压缩格式,这意味着解压缩压缩的 PNG 后会产生完全相同的像素。如果您将图像保存为 PNG,您将获得所需的结果。


fra*_*xel 7

把它保存为.png..jpg是一种有损压缩格式.