我目前正在尝试从 python 中的图像获取哈希值,我已经成功地完成了此操作并且它在某种程度上有效。
但是,我有这个问题:Image1 和 image2 最终具有相同的哈希值,即使它们不同。我需要一种更准确和精确的散列形式。
图像 1 =图像 1
图像2 =图像2
图像的哈希值是:faf0761493939381
我目前正在使用from PIL import Image
import imagehash
和imagehash.average_hash
代码在这里
import os
from PIL import Image
import imagehash
def checkImage():
for filename in os.listdir('images//'):
hashedImage = imagehash.average_hash(Image.open('images//' + filename))
print(filename, hashedImage)
for filename in os.listdir('checkimage//'):
check_image = imagehash.average_hash(Image.open('checkimage//' + filename))
print(filename, check_image)
if check_image == hashedImage:
print("Same image")
else:
print("Not the same image")
print(hashedImage, check_image)
checkImage()
Run Code Online (Sandbox Code Playgroud)
尝试使用hashlib。只需打开文件并执行哈希即可。
\nimport hashlib\nRun Code Online (Sandbox Code Playgroud)\n# Simple solution\nwith open("image.extension", "rb") as f:\n hash = hashlib.sha256(f.read()).hexdigest()\nRun Code Online (Sandbox Code Playgroud)\n# General-purpose solution that can process large files\ndef file_hash(file_path):\n # /sf/ask/1544063391/\n\n sha256 = hashlib.sha256()\n\n with open(file_path, "rb") as f:\n while True:\n data = f.read(65536) # arbitrary number to reduce RAM usage\n if not data:\n break\n sha256.update(data)\n\n return sha256.hexdigest()\nRun Code Online (Sandbox Code Playgroud)\n感谢 Anton\xc3\xadn Hoskovec 指出应该读取二进制 ( rb),而不是简单读取 (r )!