使用 PIL 将复制的图像以不同像素保存到原始图像

Sur*_*ari 4 python python-imaging-library

我需要制作图像的副本来操作它,但是保存原始图像和打开复制的图像的像素值似乎有所不同:

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()
Run Code Online (Sandbox Code Playgroud)

输出为:

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)
Run Code Online (Sandbox Code Playgroud)

最初,我认为 PIL 可能会将 R、G 和 B 通道中每个通道的所有像素值更改为 2 个值(如前两个像素所示),但是第三个像素的每个通道更改了 3 个值。

如何制作图像的可靠副本,以便更改其像素,其中复制图像的起始像素与其原始图像相同?

注意:我尝试了除“mountain.jpg”之外的其他图像,但所有图像似乎都导致了相同的问题。

Pat*_*ner 5

*.jpg是一种压缩图像格式。通过再次保存,jpg您可以为 jpg 编写器使用不同的默认质量,因此生成的像素值会有所不同。

请参阅jpg 的图像文件格式参数, 了解quality可以传递给image.save()的参数

质量
图像质量,范围从 1(最差)到 95(最好)。默认值为 75。应避免高于 95 的值;100 会禁用部分 JPEG 压缩算法,并导致生成大文件,而图像质量几乎没有任何提高。

任何一个

有关的: