保存不同的像素原件PIL复制的图像

问题描述 投票:2回答:2

我需要一个图像的副本来操纵它,但是保存原始图像和对外开放的复制人似乎在他们的像素值不同:

from PIL import Image

# Open original image
img = Image.open("mountain.jpg")
data = img.load()

# Display individual pixels
print("Pixel 1: {}".format(data[0,0]))
print("Pixel 2: {}".format(data[0,1]))
print("Pixel 3: {}".format(data[0,2]))

# Makes a copy of the input image and loads the copied image's pixel map
copyImage = img.copy()

copyImage.save('copy.jpg')
copyImage.close()

# Opens the copied image that was saved earlier and its pixel map
copy = Image.open("copy.jpg")
copy_data = copy.load()

print()

# Display copied images' individual pixels
print("Pixel 1 (copy): {}".format(copy_data[0,0]))
print("Pixel 2 (copy): {}".format(copy_data[0,1]))
print("Pixel 3 (copy): {}".format(copy_data[0,2]))

copy.close()

这是输出:

Pixel 1: (72, 102, 112)
Pixel 2: (75, 105, 115)
Pixel 3: (71, 101, 111)

Pixel 1 (copy): (70, 100, 110)
Pixel 2 (copy): (77, 107, 117)
Pixel 3 (copy): (74, 104, 114)

最初以为PIL可能改变由2个值的所有像素值的每个R,G和B通道的(如可与前两个像素中可以看出),然而,第三像素具有3个值的各信道的变化。

我怎样才能使图像的可靠副本,以改变它的像素,其中复印图像的起始像素为原来的一样吗?

注:我已经试过比我的“mountain.jpg”之外的其它图像,但似乎都导致了同样的问题。

python python-imaging-library
2个回答
1
投票

*.jpgcompressed image format。通过再次保存jpg您使用不同的默认质量为JPG作家因此产生的像素值不同。

image file format params for jpg为可以传递给qualityimage.save()参数

质量 图像质量,其规模从1(最差)至95(最好)。缺省值是75.值高于95应该尽量避免。 100禁用大型文件的JPEG压缩算法的部分,并且结果与图像质量几乎没有任何增益。

有关:


2
投票

问题是保存图像为JPG。尝试用PNG做。通过保存为JPG图像,你正在做的JPG压缩。这改变了像素。做这个

copyImage.save('copy.png')
copyImage.close()

copy = Image.open("copy.png")
copy_data = copy.load()

注意:

您可能希望看到JPG和PNG之间的差异。

JPG是丢失数据的成本压缩

PNG是压缩不会丢失数据

JPG将产生具有非常低的尺寸的图像,但每次您保存图像,你basicly一再压缩它。一般质量低

PNG会造成相当大的规模,但保存和载入图像不会产生任何的像素改变。

© www.soinside.com 2019 - 2024. All rights reserved.