md5 из объекта pil

как я могу получить md5 объекта pil без сохранения файла?

imq.save('out.png') hash = hashlib.md5(open('out.png','rb').read()).hexdigest() 

На самом деле существует более простое решение:

 hashlib.md5(img.tostring()).hexdigest() 

StringIO этого вы можете записать его в StringIO , а затем взять хэш этого.

Повернув ответ @ Ignacio в код, используя этот ответ, чтобы помочь:

 import StringIO, hashlib output = StringIO.StringIO() img.save(output) hash = hashlib.md5(output.getvalue()).hexdigest() 

Как указано в других заметках ответа, это может привести к KeyError, если PIL попытается автоматически определить выходной формат. Чтобы избежать этой проблемы, вы можете указать формат вручную:

 img.save(output, format='GIF') 

(Примечание: я использовал «img» в качестве переменной, а не ваш «imq», который, как я предполагал, был опечаткой).

Вы можете использовать следующий метод класса PIL Image чтобы получить необработанные данные изображения для подачи на md5() .

последовательность im.getdata () =>

Возвращает содержимое изображения в виде объекта последовательности, содержащего значения пикселей. Объект последовательности сглаживается, так что значения для строки 1 следуют сразу после значений нулевой линии и т. Д.

Обратите внимание, что результирующий MD5-хэш использования этого не будет таким же, как ваш примерный код, потому что он (по крайней мере частично) не зависит от конкретного формата файла изображения, используемого для сохранения изображения. Это может быть полезно, если вы хотите сравнить фактические изображения независимо от конкретного формата файла изображения, в котором они могут быть сохранены.

Чтобы использовать его, вам нужно будет хранить хеш MD5 данных изображения где-то независимо от любого файла изображения, где он может быть извлечен, когда это необходимо, – в отличие от его создания, считывая весь файл в память как двоичные данные, такие как код в вашем вопрос. Вместо этого вам нужно всегда загружать изображение в PIL, а затем использовать метод getdata() для вычисления хэшей.