首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >打印使用Python打开的图像的md5哈希

打印使用Python打开的图像的md5哈希
EN

Stack Overflow用户
提问于 2014-06-10 02:32:39
回答 4查看 11.9K关注 0票数 8

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

EN

回答 4

Stack Overflow用户

发布于 2014-06-10 02:45:30

您可以将图像保存到io.BytesIO(),并获取其值的md5散列:

代码语言:javascript
复制
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散列:

代码语言:javascript
复制
img.save(NEWFILE, 'PNG')
m = hashlib.md5()
data = open(NEWFILE, 'rb').read()
m.update(data)
print(m.hexdigest())

请注意,如果Image是从有损格式(如JPEG )加载的,则您获得的md5散列可能与从原始文件本身获得的散列不同,这不仅是因为上面的代码将图像保存为PNG格式,还因为即使将其重新保存为JPEG格式,保存为有损格式也会产生不同的数据。

票数 13
EN

Stack Overflow用户

发布于 2018-12-12 04:49:25

代码语言:javascript
复制
from PIL import Image
import hashlib

md5hash = hashlib.md5(Image.open('test.png').tobytes())
print(md5hash.hexdigest())
票数 11
EN

Stack Overflow用户

发布于 2014-06-10 04:35:53

PIL/Pillow有一个Image方法tobytes (或旧版本中的tostring ),它将以字节字符串的形式存储图像像素值。只需对返回的字节串运行散列算法即可。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24126596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档