从PIL对象获取md5

10 投票
4 回答
5850 浏览
提问于 2025-04-16 07:42

我该怎么获取PIL对象的MD5值,而不需要先把它保存到文件里呢?

    imq.save('out.png')
    hash =  hashlib.md5(open('out.png','rb').read()).hexdigest()

4 个回答

4

你可以先把它写入一个叫做 StringIO 的东西,然后再对这个内容进行哈希处理。

5

把@Ignacio的回答变成代码,使用了这个回答来帮助:

import StringIO, hashlib

output = StringIO.StringIO()
img.save(output)
hash = hashlib.md5(output.getvalue()).hexdigest()

正如引用的其他回答所提到的,如果PIL(Python图像库)尝试自动检测输出格式,这可能会导致一个叫做KeyError的错误。为了避免这个问题,你可以手动指定格式:

img.save(output, format='GIF')

(注意:我用了“img”作为变量名,而不是你提到的“imq”,我猜那是个打字错误。)

17

其实有更简单的解决办法:

hashlib.md5(img.tostring()).hexdigest()

撰写回答