打印用Python的PIL打开的图像的md5哈希

问题描述 投票:6回答:4

如何在PIL中打开图像,然后打印图像的md5哈希值而不将其保存到文件并读取文件?

python md5 python-imaging-library
4个回答
10
投票

您可以将图像保存为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,保存为有损格式也会产生不同的数据。


4
投票
from PIL import Image
import hashlib

md5hash = hashlib.md5(Image.open('test.png').tobytes())
print(md5hash.hexdigest())

3
投票

qazxsw poi有一个qazxsw poi方法qazxsw poi(或旧版本中的qazxsw poi),它将图像像素值存储在一个字节字符串中。只需在返回的字节字符串上运行哈希算法。

这比编写PNG等特定格式更有效,因为它是内部使用的本机表示。


1
投票

Re:评论:忽略exif,如何将数据复制到新的PIL/Pillow和md5中的字符串表示?

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