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
Répondre
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.
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. –
@ 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'. –
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. –
Utilisez le module hashlib qui fait partie de la distribution standard. –