2016-06-02 4 views
1

Мне нравится сравнивать два изображения. imagemagic tool делает это для меня, используя подсказку cmd. он сравнивает два изображения (например, положение кнопки отличается) и выводит результат изображения в новом изображении gif, что подчеркивает разницу. Тем не менее, я хочу, чтобы какой-то инструмент генерировал новый образ, как это, однако, только если есть разница. Пожалуйста, предложите, как я могу это сделать с помощью любого инструмента или даже если это возможно, используя селен с java. imagemagic генерирует новый результат, даже если между ними нет никакой разницы.Как сравнить два изображения с использованием Selenium

отредактирован: Я сделал RND и пришел к выводу, что imagemagic + iam4java можно использовать через селен, чтобы сравнить изображения, но до сих пор не может найти, как поставить условие генерации выходного изображения, только если есть разница

ответ

1

Использование Java для сравнения 2 изображения:

BufferedImage imgA = ImageIO.read(new File("C:/img/picA.jpg")); 
    BufferedImage imgB = ImageIO.read(new File("C:/img/picB.jpg")); 

    boolean bufferedImagesEqual(BufferedImage img1, BufferedImage img2) { 
    if (img1.getWidth() == img2.getWidth() && img1.getHeight() == img2.getHeight()) { 
    for (int x = 0; x < img1.getWidth(); x++) { 
     for (int y = 0; y < img1.getHeight(); y++) { 
     if (img1.getRGB(x, y) != img2.getRGB(x, y)) 
     return false; 
     } 
     } 
    } else { 
     return false; 
    } 
    return true; 
    } 

для получения разностного изображения вы можете сделать что-то вроде этого:

private static void subtractImages(BufferedImage image1, BufferedImage image2) throws IOException { 
    BufferedImage image3 = new BufferedImage(image1.getWidth(), image1.getHeight(), image1.getType()); 
    int color; 
    for(int x = 0; x < image1.getWidth(); x++) 
     for(int y = 0; y < image1.getHeight(); y++) { 
      color = Math.abs(image2.getRGB(x, y) - image1.getRGB(x, y));     
      image3.setRGB(x, y, color); 
     } 
    ImageIO.write(image3, "bmp", new File("image.bmp")); 
} 

Source of subtractImages method

Source of bufferedImagesEqual method

Gist with a working example

+0

Спасибо Тьягу. Очень полезно обходное решение. – Pawan

0

Вы можете попробовать использовать applitools (http://applitools.com/) для тестирования сравнения изображений. Он сохраняет изображения на своем сервере и печатает ссылку на изображение в журнале только в случае застоек. Поэтому, если ваш тест проходит (изображения одинаковы), вы увидите зеленый тест. Если есть разница между изображениями - тест завершится неудачно, и вы увидите в журнале ссылку на applitools, где вы получите изображение с выделенными областями различий и сможете увидеть исходное изображение (чтобы сравнить с вашими собственными глазами :)).

+0

Спасибо за предложение Anna. – Pawan

+0

Является ли applitools бесплатным? или коммерческих? –

Смежные вопросы