如何在PIL中打开图像,然后打印图像的md5哈希值而不将其保存到文件并读取文件?
您可以将图像保存为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
,保存为有损格式也会产生不同的数据。
from PIL import Image
import hashlib
md5hash = hashlib.md5(Image.open('test.png').tobytes())
print(md5hash.hexdigest())
qazxsw poi有一个qazxsw poi方法qazxsw poi(或旧版本中的qazxsw poi),它将图像像素值存储在一个字节字符串中。只需在返回的字节字符串上运行哈希算法。
这比编写PNG等特定格式更有效,因为它是内部使用的本机表示。
Re:评论:忽略exif,如何将数据复制到新的PIL/Pillow
和md5中的字符串表示?
Image