image-comparison icon indicating copy to clipboard operation
image-comparison copied to clipboard

[QUESTION]

Open viro852 opened this issue 2 years ago • 2 comments

Hi thx for such a great tool! I am trying to compare PDFs, can i define comparing area? I mean i dont want to compare whole documet but small area of it.

viro852 avatar Jan 18 '24 10:01 viro852

I can recommend using PDFCompare. It allows you to set up exclusion zones that are exempt from the comparison.

rmcdouga avatar Jan 18 '24 16:01 rmcdouga

Пришлось костылить, но я написал вот такой метод для добавления исключений. В него передаю только те области, которые я хочу проверять | minX | minY | maxX | maxY | | 100 | 100 | 400 | 400 | | 500 | 500 | 800 | 800 | и т.д. Что является DataTable и далее из кода понятно, что я его преобразую в List<Map<String, Integer>> coordinates = coordinatesDataTable.asMaps(String.class, Integer.class);

private List<Rectangle> calculateExcludedAreas(DataTable coordinatesDataTable, int imageWidth, int imageHeight) { List<Rectangle> excludedAreas = new ArrayList<>(); List<Map<String, Integer>> coordinates = coordinatesDataTable.asMaps(String.class, Integer.class); for (Map<String, Integer> row : coordinates) { int minX = row.get("minX"); int minY = row.get("minY"); int maxX = row.get("maxX"); int maxY = row.get("maxY"); // Учитываем размеры изображения при вычислении координат прямоугольников minX = Math.max(0, Math.min(minX, imageWidth)); minY = Math.max(0, Math.min(minY, imageHeight)); maxX = Math.max(0, Math.min(maxX, imageWidth)); maxY = Math.max(0, Math.min(maxY, imageHeight)); // Добавляем прямоугольную область, которую нужно исключить из текущего изображения excludedAreas.add(new Rectangle(minX, minY, maxX, maxY)); } // Находим прямоугольные области, которые не пересекаются с областями исключения List<Rectangle> includedAreas = new ArrayList<>(); includedAreas.add(new Rectangle(0, 0, imageWidth, imageHeight)); // Добавляем включающую всё изображение область for (Rectangle excludedArea : excludedAreas) { List<Rectangle> updatedIncludedAreas = new ArrayList<>(); for (Rectangle includedArea : includedAreas) { if (!includedArea.isOverlapping(excludedArea)) { // Если области не пересекаются, добавляем включающую область в список updatedIncludedAreas.add(includedArea); } else { // Если области пересекаются, разбиваем включающую область на части и добавляем их в список Rectangle intersection = new Rectangle( Math.max(includedArea.getMinPoint().x, excludedArea.getMinPoint().x), Math.max(includedArea.getMinPoint().y, excludedArea.getMinPoint().y), Math.min(includedArea.getMaxPoint().x, excludedArea.getMaxPoint().x), Math.min(includedArea.getMaxPoint().y, excludedArea.getMaxPoint().y) ); // Добавляем прямоугольники до и после пересечения if (includedArea.getMinPoint().x < intersection.getMinPoint().x) { updatedIncludedAreas.add(new Rectangle( includedArea.getMinPoint().x, includedArea.getMinPoint().y, intersection.getMinPoint().x, includedArea.getMaxPoint().y )); } if (includedArea.getMaxPoint().x > intersection.getMaxPoint().x) { updatedIncludedAreas.add(new Rectangle( intersection.getMaxPoint().x, includedArea.getMinPoint().y, includedArea.getMaxPoint().x, includedArea.getMaxPoint().y )); } if (includedArea.getMinPoint().y < intersection.getMinPoint().y) { updatedIncludedAreas.add(new Rectangle( intersection.getMinPoint().x, includedArea.getMinPoint().y, intersection.getMaxPoint().x, intersection.getMinPoint().y )); } if (includedArea.getMaxPoint().y > intersection.getMaxPoint().y) { updatedIncludedAreas.add(new Rectangle( intersection.getMinPoint().x, intersection.getMaxPoint().y, intersection.getMaxPoint().x, includedArea.getMaxPoint().y )); } } } includedAreas = updatedIncludedAreas; } return includedAreas; }

Таким образом я добавляю в исключение все блоки, за исключением тех, которые передаю в DataTable

Не судите строго, первый раз участвую в комьюнити)

max08041993 avatar Feb 07 '24 14:02 max08041993

@viro852, hello. If you need compare PDF's, you can use other tools. This one is using for images.

romankh3 avatar Jun 17 '24 20:06 romankh3