Ответ 1
Самый простой, немедленно доступный метод для этого: используйте ImageMagick compare
(который также доступен в Windows).
Он даже может сравнивать страницы PDF (хотя он использует Ghostscript в качестве своего делегата для отображения страниц PDF на пиксельные изображения):
compare.exe ^
tested.pdf[0] ^
reference.pdf[0] ^
-compose src ^
delta.pdf
В результате delta.pdf
будет отображаться каждый пиксель как красный, который имеет другой цвет между двумя сравниваемыми страницами PDF. Все идентичные пиксели будут чисто белыми. [0]
сообщите compare
, чтобы использовать первые страницы каждого файла для сравнения (количество страниц равно нулю).
Вы можете увидеть, как это работает в следующем примере:
compare.exe ^
http://qtrac.eu/boson1.pdf[1] ^
http://qtrac.eu/boson2.pdf[1] ^
-compose src ^
delta.pdf
Вот соответствующие страницы (конвертированные в уменьшенные PNG для веб-дисплея). Страница ссылки находится слева, измененная страница - средняя, справа - изображение "треугольник-красный".
Немного другой визуальный результат, который вы можете получить, пропуская параметр -compose src
. Затем вы получите исходные пиксели файлов в виде затененного серым фоном (для контекста) с треугольными пикселями красного цвета:
compare.exe ^
http://qtrac.eu/boson1.pdf[1] ^
http://qtrac.eu/boson2.pdf[1] ^
delta.pdf
Если вам не нравится красный цвет для различий пикселей, используйте -highlight-color
:
compare.exe ^
http://qtrac.eu/boson1.pdf[1] ^
http://qtrac.eu/boson2.pdf[1] ^
-highlight-color green ^
delta.pdf
Разрешение по умолчанию, используемое для визуализации страниц PDF, составляет 72 dpi. Если вам нужна более высокая точность, вы можете переключиться на 300 dpi с помощью параметра -density
следующим образом:
compare.exe ^
-density 300 ^
http://qtrac.eu/boson1.pdf[1] ^
http://qtrac.eu/boson2.pdf[1] ^
delta.pdf
Примечание. переключение на более высокие плотности замедлит процесс и создаст более крупные файлы.
Вы даже можете создать файл *.txt для дельта-изображения, которое описывает каждую координату пикселя и соответствующие значения цвета:
compare ^
http://qtrac.eu/boson1.pdf[1] ^
http://qtrac.eu/boson2.pdf[1] ^
-compose src ^
-highlight-color black ^
delta.txt
Затем просто подсчитайте количество общих против чёрных пикселей (извините, это синтаксис Unix/Linux/MacOSX):
total_pixels=$(( $(cat delta.txt | wc -l) - 1))
black_pixels=$(( $(grep black delta.txt | wc -l) -1 ))
В примере, использованном для приведенных выше иллюстраций, я получаю
total_pixels=500990
black_pixels=8727
Конечно, "идеальным" результатом было бы
black_pixels=0