您会认为这很简单,但以下代码并不像我期望的那样有效:
from hashlib import md5
from PIL import Image
im = Image.open("/tmp/original.jpg")
im.save("/tmp/new.jpg", quality="keep")
original = Image.open("/tmp/original.jpg")
new = Image.open("/tmp/new.jpg")
assert md5(original.tobytes()).hexdigest() == md5(new.tobytes()).hexdigest()
为什么当我只是将图像保存为新文件并保持质量设置相同时,图像数据是否相同?我错过了什么?
更新(说明):
我的问题是我有一个Pillow JpegImage
对象作为管道的一部分交给我的代码而我无法控制文件保存到磁盘的步骤:
<magic> → <my code> → <magic that saves to disk>
我希望我的代码所做的就是为要保存的jpeg图像添加/更新/替换(任何这些)EXIF数据。由于此信息在图像对象上似乎不可编辑,因此我可以想象的唯一方法是将图像保存到临时位置(如BytesIO
),保存并重新输入 - 在将它传递给链中的下一个函数之前,用Image.open()
打开它。
请告诉我,有更聪明,更有效的方法吗?