我需要复制一张图片来进行操作,但是保存原始图片和打开复制的图片似乎在像素值上有所不同:
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可能会对R、G和B通道的每个像素值都进行2个值的更改(如前两个像素所示),但第三个像素对每个通道的更改为3个值。
我该如何创建一个可靠的图像副本,以便更改其像素,其中复制图像的起始像素与其原始像素相同?
注意: 除了我的'mountain.jpg'之外,我还尝试了其他图像,但似乎都会出现相同的问题。
shutil.copyfile
复制文件,你会得到一个与源文件完全相同的二进制副本 - 它将具有与原始文件相同的特性,除非你修改像素并再次保存它们 - 然后它会被重新压缩。你可以切换到 https://en.wikipedia.org/wiki/Image_file_formats#JPEG_2000 这是一种无损格式,如果多次加载/修改/保存,至少不会随着时间的推移而降低质量。 - Patrick Artner