【发布时间】:2015-10-25 00:26:09
【问题描述】:
考虑下面的代码。它将图像转换为线条艺术,然后计算位的 md5sum。我不知道比使用生成单个位的生成器表达式更好地做到这一点。但是,我怎样才能以有效的方式将结果提供给 md5 呢?
下面的代码使用bitarray 对象执行此操作,但是将bitarray 实例(似乎在后台使用花哨的C 内容)交给md5 时我得到了不确定的结果。那么这样做的“正确”方法是什么?
import os, hashlib
from PIL import Image
from bitarray import bitarray
def image_pixel_hash_code(image):
pixels = list(image.getdata())
avg = sum(pixels) / len(pixels)
bits = bitarray(pixel < avg for pixel in pixels)
return hashlib.md5(bits).hexdigest()
im = Image.open(os.path.expanduser("~/Downloads/test.jpg")).convert("L")
print image_pixel_hash_code(im)
附:我可以重现位数组的不确定性,但我认为这只是将两个不应该一起工作的东西一起使用的功能。
【问题讨论】:
-
只要正确地完成从一件事到另一件事的接口,它们就没有理由不能一起工作。
bitarray不会产生不确定的结果,如果它产生了,那将毫无用处。顺便说一句,您可以使用bits = bitarray(pixel < avg for pixel in pixels)简化一些事情。 -
@martineau,我已经改进了你的代码,谢谢。 John 解开了非确定性之谜(我需要用零填充)。
标签: python hash md5 generator bitarray