И мне уже не первый раз пишут автоматизаторы, что хотят ее использовать - я ее опубликовал и теперь хочу вынести ее на ваш суд - показать и увидеть, будет ли она еще кому-то полезная, может что-то есть, что можно добавить/изменить.
Есть две картинки - expected и actual и идет их сравнение.
Объект результата будет состоять из этих двух картинок, результата сравнения и енама с состоянием(MATCH, MISMATCH, SIZE_MISMATCH).
Usecase: есть две картинки, которые как-то формируются программно и должны быть одинаковы, за исключением каких-то областей, например: Первая картинка
Плюс добавлены некие области, которые нужно игнорировать, которые будут потом окрашены в зеленые прямогульники. И результат будет да, они одинаковы, за исключением этих областей.
@dimand58, я не знаком с этой библиотекой. Сложно сказать что она может по описанию в README. Она покрывает функционал, который я описал?
Преимущество моей библиотеки в том, что она не зависит ни от чего и выполняет одну функцию, быстро и хорошо.
@McStar
Да, сравнение идет именно по пиксельно.
Нет, нельзя с разным разрешением, так как это уже задача совсем другого уровня и для этой цели она не решается обычным алгоритмом.
Если вся картинка сдвинется на пиксель в сторону, то она вся подкрасится как изменившаяся?
По-моему 100% схождение до пикселя не очень удачная идея, особенно в тестировании и особенно при проверке верстки на разных браузерах. Но все равно спасибо за то, что поделились библиотекой, возможно кому-то она очень поможет.
@Mihail_Bratuhin
Да, в случае когда может быть сдвиг картинок - это применить нельзя будет. Такие вещи, как обнаружение и понимание - это уже совсем другой уровень задачи.
Я более пристально изучил эту либу и хочу сказать, что там другой функционал и другое назначение. То есть в случае использования которое я описал, искрумент aShot явно излишний и не имеет всех тех данных, которые предоставляются у меня в библиотеке.
Там всё-таки заточен продукт под скриншоты и сравнение идет именно там. В моей библиотеке все это не важно, важно что есть картинки и все.
Так как сравнение завязано на то, чтоб потом отобразить области различия, в проекте это сущности Rectangle, то нужно как-то эти области определить.
Имеется в виду, что есть предположение, что области различия не должны быть непрерывными, а могут разделяться пикселями, которые одинаковы. И это число отвечает за то, какое расстояние будет учитываться при сравнении.
Пример может быть любой текст, в котором буквы не связаны друг с другом, а по сути они являются одной областью.
Интересно, зачем вы хардкодите толерантность в 10%, а не даете пользователю самому настраивать степень толерантности. Н-р для сравнения маленьких картинок погрешность стоит понизить.
И в методе вычисления евклидового расстояния:
каждый раз вычисляете константу Math.sqrt(Math.pow(255, 2) * 3);. Хотя можно это сделать один раз, при инициировании класса. Не знаю, может джава умеет кэшировать такие выражения внутри себя. Да и вообще избавиться от лишней операции возведения в степень: 255 * Math.sqrt(3)
Так исторически сложилось, что уровень стоит как 10%. Если есть необходимость - этот функционал может легко быть добавлен. Такого запроса еще не поступало.
Если есть необходимость - можно создать Improvement issue на гитхабе и я реализую этот функционал.
По поводу вычисления, нужно подумать чтоб ответить однозначно. Нужно подумать, посмотреть. Кеширование данных мне точно не нравится, так как это влечет усложнение механизма. Если есть реальные идеи как это реализовать - я открыт к обсуждению.
@romankh3 ответили и честно говоря ответы довольно забавные, не особо горя желанием заниматься ненужной дискуссией, просто пару комментов по самому броскому:
Это прямо классика, хотя по сути хардкод это всегда атата, и обычно рекомендуют во всяких книжках если уж не делать изменяемые пользователем опции, то хотя бы человекочитаемые константы, с комментом почему так и менять нельзя.
Тут по сути смотреть даже особо нечего, при условии конечно что это вы писали код. Метод в цикле для стандартной картинки вызывается не меньше 1 000 000 раз, и каждый раз производится вычисление одного и того же значения, что явно не гуд по перформансу.
А так ну прикольно, еще одна тулза для сравнения картинок
Не думаю, что это нечто экстраординарное, вот плиз н-р разработка от Яндекса GitHub - gemini-testing/looks-same: Node.js library for comparing images
Здесь можно получить массив регионов различий, разбитых по кластерам, и уже дальше решать - игнорить эти регионы или фейлить тесты. И других плюшек полно. Но не совсем java, a немного javascript
Не стоит так сильно льстить джаве :), питон и джаваскрипт составят достойную конкуренцию. И странно что на “частой” джаве только-только заимплиментили то, что на js уже есть пару лет.
Я не думаю, что мы здесь будем спорить о том, популярная ли Java. Хватает тех, кто ею пользуется.
Тем, кто автоматизирует на Java будет ой как не просто использовать библиотеки других языков. Плюс мы же не можем сказать. что такого нет.