Попытка решить проблему предотвращения дублирования изображений для загрузки.
У меня есть два JPG. Глядя на них, я вижу, что они на самом деле идентичны. Но по какой-то причине они имеют разный размер файла (один извлекается из резервной копии, другой - другая загрузка), и поэтому у них есть другая контрольная сумма md5.
Как я могу эффективно и уверенно сравнивать два изображения в одном и том же смысле, как человек сможет увидеть, что они явно идентичны?
Пример: http://static.peterbe.com/a.jpg и http://static.peterbe.com/b.jpg
Обновить
Я написал этот script:
import math, operator
from PIL import Image
def compare(file1, file2):
image1 = Image.open(file1)
image2 = Image.open(file2)
h1 = image1.histogram()
h2 = image2.histogram()
rms = math.sqrt(reduce(operator.add,
map(lambda a,b: (a-b)**2, h1, h2))/len(h1))
return rms
if __name__=='__main__':
import sys
file1, file2 = sys.argv[1:]
print compare(file1, file2)
Затем я загрузил два визуально идентичных изображения и запустил script. Выход:
58.9830484122
Может ли кто-нибудь сказать мне, что должно быть подходящим отключением?
Обновление II
Разница между a.jpg и b.jpg заключается в том, что вторая была сохранена с PIL:
b=Image.open('a.jpg')
b.save(open('b.jpg','wb'))
Это, по-видимому, относится к очень очень качественным модификациям. Теперь я решил свою проблему, применив ту же самую сохранность PIL к загружаемому файлу, ничего не делая с ней, и теперь он работает!