Python中zfill方法的解释

时间:2015-05-16 12:20:33

标签: python hash

我正在使用ImageHash模块来获取图像的哈希值。我有这段代码:

hashSize = 8
imghash3 = []
image = "pic1.jpg"

imghash1 = imagehash.phash(Image.open(image))
print(imghash1)
>>>d1d1f1f3f3737373
imghash2 = str(imagehash.phash(Image.open(image), hashSize))
print(imghash2)
>>>11b97c7eb158ac
imghash3.append(bin( int(imghash2, 16))[2:].zfill(64))
print(imghash3)
>>>['0000000000010001101110010111110001111110101100010101100010101100']

所以imagehash1是模块的基本用法。

现在我不明白hashSizeimagehash2中的原始字符串进行了什么样的转换,以及第3个函数如何将imagehash2转换为64位字符串。

1 个答案:

答案 0 :(得分:1)

phash计算期间,调整原始图像的大小。 hashSize参数基本上控制调整大小的图像的高度和宽度。

可以找到算法here。实施第一步(缩小规模):

image = image.convert("L").resize((hash_size, hash_size), Image.ANTIALIAS)

请参阅imagehash.phash

的来源

让我们看看imghash3.append(bin( int(imghash2, 16))[2:].zfill(64))行的作用。

In [16]: imghash2 = '11b97c7eb158ac'

首先,它将十六进制字符串转换为整数

In [17]: int(imghash2, 16)
Out[17]: 4989018956716204

内置bin函数用于将整数转换为二进制字符串

In [18]: bin( int(imghash2, 16))
Out[18]: '0b10001101110010111110001111110101100010101100010101100'

使用list slice

删除前两个字符
In [19]: bin( int(imghash2, 16))[2:]
Out[19]: '10001101110010111110001111110101100010101100010101100'
左侧的

Adds 0制作一个总共64个字符的字符串

In [20]: bin( int(imghash2, 16))[2:].zfill(64)
Out[20]: '0000000000010001101110010111110001111110101100010101100010101100'