这很简单。制作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)
例如,。
为什么保存时价值会发生变化?我该如何预防呢?请帮忙。
感谢。
答案 0 :(得分:7)
将其另存为.png
。 .jpg
是一种有损压缩格式。
答案 1 :(得分:4)
JPG不承诺准确存储您想要的像素。它压缩您的数据以使文件更小,压缩基于人类感知。我们的想法是创建一个像人类一样的像素数组,即使它们是不同的像素。
因此,您正在编写的像素位于输出中,但相邻像素已被更改为能够将整个图像存储在较小的空间中。这称为“有损压缩”,因为数据丢失了。
其他图片格式没有此属性。 PNG是一种无损压缩格式,这意味着在解压缩压缩的PNG之后会产生相同的像素。如果您将图像保存为PNG,您将获得所需的结果。