我正在嘗試使用 MD5 作為檔案名保存檔案,為此我在 Numpy 陣列中生成影像,有時可能是相同的影像,所以我想計算 MD5 以覆寫現有影像或避免保存。
問題是我從 NumPy 陣列獲得的哈希與最終保存的影像不同,為此我使用以下代碼:
hashlib.md5(array.astype("uint8")).hexdigest()
是否可以從 NumPy 陣列計算 md5 哈希,或者我需要用隨機名稱保存它并在之后重命名它?
謝謝
uj5u.com熱心網友回復:
遵循評論并基于您要保存 numpy 陣列而不是影像檔案的假設,您可以這樣做:
hash = hashlib.md5(array.tobytes()).digest()
np.save(hash, array)
非常不建議以下內容!
如果您必須保存影像,則應按順序:
- 保存影像(例如.png)
- 用 hashlib 消化檔案內容
- 洗掉現有影像(如果有)
- 重命名您的新影像
在代碼中:
import hashlib
import os
from matplotlib.image import imsave
import binascii
imsave('myimage.jpg', image_array)
with open('myimage.jpg','rb') as f:
ba = f.read()
_hash = hashlib.md5(ba).digest()
new_filename = binascii.hexlify(_hash).decode() '.jpg'
if os.path.exists(new_filename):
os.remove(new_filename)
os.rename('myimage.jpg',new_filename)
請避免這樣做,正如@Mark 在下面評論的那樣,這里復制:
您正在計算 JPEG 壓縮檔案的 md5 摘要,因此如果 1)JPEG 是由不同的庫撰寫的,或 2)同一庫的不同版本,或 3,您可能不會檢測到它是否對應于另一個相同的 Numpy 陣列) 具有不同的質量設定或 4) 如果日期嵌入在元資料中,則在不同的日期,或 5) 為不同的影像格式,例如 PNG
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/484216.html
