Вы можете использовать следующий метод класса PIL Image
, чтобы получить необработанные данные изображения для подачи в md5()
.
im.getdata () => sequence
Возвращает содержимое изображения в виде
объект последовательности, содержащий пиксель
ценности. Объект последовательности
сплющенный, так что значения для первой строки
следовать сразу после значений
нулевая строка и т. д.
Обратите внимание, что полученный хэш MD5 с использованием этого не будет таким же, как ваш пример кода, потому что он (по крайней мере частично) не зависит от конкретного формата файла изображения, используемого для сохранения изображения. Это может быть полезно, если вы хотите сравнить реальные изображения независимо от формата файла изображения, в котором они могут быть сохранены.
Чтобы использовать его, вам нужно будет хранить хэш MD5 данных изображения где-нибудь независимо от любого файла изображения, где он может быть извлечен при необходимости, а не генерировать его путем чтения всего файла в память в виде двоичных данных, таких как код в вашем вопросе делает. Вместо этого вам нужно будет всегда загружать изображение в PIL, а затем использовать для него метод getdata()
для вычисления хэшей.