Home

Awesome

logo-trans Maven_Workflow Maven Central Javadocs BCH compliance PRs Welcome

About

Published on Maven Central and jCenter Java Library that compares 2 images with the same sizes and shows the differences visually by drawing rectangles. Some parts of the image can be excluded from the comparison. Can be used for automation qa tests. The Usages of the image-comparison can be found here Usage Image Comparison

Article about growing image-comparison on habr: How did the test task become a production library

Configuration

All these configurations can be updated based on your needs.

PropertyDescription
thresholdThe threshold which means the max distance between non-equal pixels. Could be changed according size and requirements to the image.
rectangleLineWidthWidth of the line that is drawn the rectangle.
destinationFile of the result destination.
minimalRectangleSizeThe number of the minimal rectangle size. Count as (width x height). By default it's 1.
maximalRectangleCountMaximal count of the Rectangles, which would be drawn. It means that would get first x biggest rectangles. Default value is -1, that means that all the rectangles would be drawn.
pixelToleranceLevelLevel of the pixel tolerance. By default it's 0.1 -> 10% difference. The value can be set from 0.0 to 0.99.
excludedAreasExcludedAreas contains a List of Rectangles to be ignored when comparing images.
drawExcludedRectanglesFlag which says draw excluded rectangles or not.
fillExcludedRectanglesFlag which says fill excluded rectangles or not.
percentOpacityExcludedRectanglesThe desired opacity of the excluded rectangle fill.
fillDifferenceRectanglesFlag which says fill difference rectangles or not.
percentOpacityDifferenceRectanglesThe desired opacity of the difference rectangle fill.
allowingPercentOfDifferentPixelsThe percent of the allowing pixels to be different to stay MATCH for comparison. E.g. percent of the pixels, which would ignore in comparison. Value can be from 0.0 to 100.00
differenceRectangleColorRectangle color of image difference. By default, it's red.
excludedRectangleColorRectangle color of excluded part. By default, it's green.

Release Notes

Can be found in RELEASE_NOTES.

Usage

Maven

<dependency>
    <groupId>com.github.romankh3</groupId>
    <artifactId>image-comparison</artifactId>
    <version>4.4.0</version>
</dependency>

Gradle

compile 'com.github.romankh3:image-comparison:4.4.0'

To compare two images programmatically

Default way to compare two images looks like:
        //load images to be compared:
        BufferedImage expectedImage = ImageComparisonUtil.readImageFromResources("expected.png");
        BufferedImage actualImage = ImageComparisonUtil.readImageFromResources("actual.png");

        //Create ImageComparison object and compare the images.
        ImageComparisonResult imageComparisonResult = new ImageComparison(expectedImage, actualImage).compareImages();
        
        //Check the result
        assertEquals(ImageComparisonState.MATCH, imageComparisonResult.getImageComparisonState());
Save result image

To save result image, can be used two ways:

  1. add a file to save to constructor. ImageComparison will save the result image in this case.
        //load images to be compared:
        BufferedImage expectedImage = ImageComparisonUtil.readImageFromResources("expected.png");
        BufferedImage actualImage = ImageComparisonUtil.readImageFromResources("actual.png");
        
        // where to save the result (leave null if you want to see the result in the UI)
        File resultDestination = new File( "result.png" );

        //Create ImageComparison object with result destination and compare the images.
        ImageComparisonResult imageComparisonResult = new ImageComparison(expectedImage, actualImage, resultDestination).compareImages();
  1. execute ImageComparisonUtil.saveImage static method
        //load images to be compared:
        BufferedImage expectedImage = ImageComparisonUtil.readImageFromResources("expected.png");
        BufferedImage actualImage = ImageComparisonUtil.readImageFromResources("actual.png");

        //Create ImageComparison object with result destination and compare the images.
        ImageComparisonResult imageComparisonResult = new ImageComparison(expectedImage, actualImage).compareImages();

        //Image can be saved after comparison, using ImageComparisonUtil.
        ImageComparisonUtil.saveImage(resultDestination, imageComparisonResult.getResult()); 

Demo

Demo shows how image-comparison works.

Expected Image

expected

Actual Image

actual

Result

result

Contributing

Please, follow Contributing page.

Code of Conduct

Please, follow Code of Conduct page.

License

This project is Apache License 2.0 - see the LICENSE file for details

Thanks @dee-y for designing this logo

Also if you're interesting - see my other repositories