如何在PIL中打开图像,然后打印图像的md5散列,而不将其保存到文件并读取该文件?
发布于 2014-06-10 02:45:30
您可以将图像保存到io.BytesIO(),并获取其值的md5散列:
import hashlib
import Image
import io
img = Image.open(FILENAME)
m = hashlib.md5()
with io.BytesIO() as memf:
img.save(memf, 'PNG')
data = memf.getvalue()
m.update(data)
print(m.hexdigest())这将计算相同的md5散列,就像您将Image保存到文件中,然后将文件读入字符串并获取该字符串的md5散列:
img.save(NEWFILE, 'PNG')
m = hashlib.md5()
data = open(NEWFILE, 'rb').read()
m.update(data)
print(m.hexdigest())请注意,如果Image是从有损格式(如JPEG )加载的,则您获得的md5散列可能与从原始文件本身获得的散列不同,这不仅是因为上面的代码将图像保存为PNG格式,还因为即使将其重新保存为JPEG格式,保存为有损格式也会产生不同的数据。
发布于 2018-12-12 04:49:25
from PIL import Image
import hashlib
md5hash = hashlib.md5(Image.open('test.png').tobytes())
print(md5hash.hexdigest())发布于 2014-06-10 04:35:53
PIL/Pillow有一个Image方法tobytes (或旧版本中的tostring ),它将以字节字符串的形式存储图像像素值。只需对返回的字节串运行散列算法即可。
这将比编写特定的格式(如PNG )更有效,因为它是内部使用的本机表示。
https://stackoverflow.com/questions/24126596
复制相似问题