2017-10-01 8 views
1

J'utilise oreiller pour modifier l'image, après l'édition j'utilise la méthode enregistrer et le compte suivant md5 sur le fichier enregistré. L'enregistrement du fichier prend 0.012s, pour moi c'est trop long. Est-il possible de compter md5 sur l'objet Image sans sauvegarder dans le fichier?obtenir md5 de fichier sans l'enregistrer sur le disque

+1

Trier par. Enregistrez l'image PIL dans un objet [BytesIO] (https://docs.python.org/3/library/io.html#io.BytesIO). C'est très rapide. –

+0

Utilisez le module hashlib qui fait partie de la distribution standard. –

Répondre

3

Voici une démonstration rapide de l'utilisation d'un objet BytesIO pour obtenir la somme de contrôle MD5 des données du fichier sans avoir à enregistrer le fichier sur le disque.

from hashlib import md5 
from io import BytesIO 
from PIL import Image 

size = 128 
filetype = 'png' 

# Make a simple test image 
img = Image.new('RGB', (size, size), color='red') 
#img.show() 

# Save it to a fake file in RAM 
img_bytes = BytesIO() 
img.save(img_bytes, filetype) 

# Get the MD5 checksum of the fake file 
md5sum = md5(img_bytes.getbuffer()) 
print(md5sum.hexdigest()) 

#If we save the data to a real file, we get the same MD5 sum on that file 
#img.save('red.png') 

sortie

af521c7a78abb978fb22ddcdfb04420d 

Si nous Décommentez img.save('red.png') puis passer 'red.png' à un programme standard MD5sum, nous obtenons le même résultat.

+0

Si le hachage pour identifier de façon unique l'image est tout ce dont j'ai besoin j'éviterais png et utiliserais quelque chose de plus simple comme pbm, étant donné qu'aucune IO n'est réellement faite en compressant l'image ralentirait probablement le hachage. –

+1

@ MatteoItalia Bon point, mais je soupçonne que l'OP veut le hachage MD5 des données de fichier complet. Sinon, il pourrait juste passer les données d'image brutes de 'Image.tobytes' (ou peut-être' Image.getdata') à 'hashlib.md5'. –