10

这很简单。制作 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]

输出为: (0, 3, 0) (1, 3, 0)

始终如一。

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

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

例如。

为什么储蓄后价值会发生变化?我该如何预防?请帮忙。

谢谢。

4

2 回答 2

12

将其保存为.png. .jpg是一种有损压缩格式。

于 2012-07-22T20:08:45.483 回答
8

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

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

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

于 2012-07-22T23:26:57.513 回答