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.

Overview

logo-trans Maven Central Gitter Javadocs Codacy Badge Build Status Coverage Status BCH compliance Bintray 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

  • Implementation is using only standard core language and platform features, no 3rd party libraries and plagiarized code is permitted.

  • Pixels (with the same coordinates in two images) can be visually similar, but have different values of RGB. 2 pixels are considered to be "different" if they differ more than pixelToleranceLevel(this configuration described below) from each other.

  • The output of the comparison is a copy of actual images. The differences are outlined with red rectangles as shown below.

  • No third party libraries or borrowed code are in usage.

  • Some parts of the image can be excluded from the comparison and drawn in the result image.

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

Configurations

Property Description
threshold The threshold which means the max distance between non-equal pixels. Could be changed according size and requirements to the image.
rectangleLineWidth Width of the line that is drawn the rectangle.
destination File of the result destination.
minimalRectangleSize The number of the minimal rectangle size. Count as (width x height). By default it's 1.
maximalRectangleCount Maximal 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.
pixelToleranceLevel Level of the pixel tolerance. By default it's 0.1 -> 10% difference. The value can be set from 0.0 to 0.99.
excludedAreas ExcludedAreas contains a List of Rectangles to be ignored when comparing images.
drawExcludedRectangles Flag which says draw excluded rectangles or not.
fillExcludedRectangles Flag which says fill excluded rectangles or not.
percentOpacityExcludedRectangles The desired opacity of the excluded rectangle fill.
fillDifferenceRectangles Flag which says fill difference rectangles or not.
percentOpacityDifferenceRectangles The desired opacity of the difference rectangle fill.
allowingPercentOfDifferentPixels The 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

Release Notes

Can be found in RELEASE_NOTES.

Usage

Maven

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

Gradle

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

To compare two images programmatically

class Example {
    public static void main( String[] args ) {
       // load the 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 for it.
               ImageComparison imageComparison = new ImageComparison( expectedImage, actualImage, resultDestination );
       
               //Can be used another constructor for it, without destination.
               new ImageComparison("expected.png", "actual.png");
               //or
               new ImageComparison(expectedImage, actualImage);
       
               //Also can be configured BEFORE comparing next properties:
       
               //Threshold - it's the max distance between non-equal pixels. By default it's 5.
               imageComparison.setThreshold(10);
               imageComparison.getThreshold();
       
               //RectangleListWidth - Width of the line that is drawn in the rectangle. By default it's 1.
               imageComparison.setRectangleLineWidth(5);
               imageComparison.getRectangleLineWidth();
       
               //DifferenceRectangleFilling - Fill the inside the difference rectangles with a transparent fill. By default it's false and 20.0% opacity.
               imageComparison.setDifferenceRectangleFilling(true, 30.0);
               imageComparison.isFillDifferenceRectangles();
               imageComparison.getPercentOpacityDifferenceRectangles();
       
               //ExcludedRectangleFilling - Fill the inside the excluded rectangles with a transparent fill. By default it's false and 20.0% opacity.
               imageComparison.setExcludedRectangleFilling(true, 30.0);
               imageComparison.isFillExcludedRectangles();
               imageComparison.getPercentOpacityExcludedRectangles();
       
               //Destination. Before comparing also can be added destination file for result image.
               imageComparison.setDestination(resultDestination);
               imageComparison.getDestination();
       
               //MaximalRectangleCount - It means that would get first x biggest rectangles for drawing.
               // by default all the rectangles would be drawn.
               imageComparison.setMaximalRectangleCount(10);
               imageComparison.getMaximalRectangleCount();
       
               //MinimalRectangleSize - The number of the minimal rectangle size. Count as (width x height).
               // by default it's 1.
               imageComparison.setMinimalRectangleSize(100);
               imageComparison.getMinimalRectangleSize();

               //Change the level of the pixel tolerance:
               imageComparison.setPixelToleranceLevel(0.2);
               imageComparison.getPixelToleranceLevel();
       
               //After configuring the ImageComparison object, can be executed compare() method:
               ImageComparisonResult imageComparisonResult = imageComparison.compareImages();
       
               //Can be found ComparisonState.
               ImageComparisonState imageComparisonState = imageComparisonResult.getImageComparisonState();
               
               //And Result Image
               BufferedImage resultImage = imageComparisonResult.getResult();
       
               //Image can be saved after comparison, using ImageComparisonUtil.
               ImageComparisonUtil.saveImage(resultDestination, resultImage); 
    }
}

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

Comments
  • [QUESTION] Get result of image comparison using Java

    [QUESTION] Get result of image comparison using Java

    I've carefully checked your demo sample code but it's not clear how programmatically check if the result of comparison true or false? Please, let me know.

    Thanks a lot in advance

    Jeff

    question 
    opened by jeffradom 51
  • StackOverflowError when compared 2 images with a little big different area.

    StackOverflowError when compared 2 images with a little big different area.

    Hello @romankh3 I got a Exception: Exception in thread "main" java.lang.StackOverflowError at ua.comparison.image.ImageComparison.joinToRegion(ImageComparison.java:110) when compared 2 images with a little big different area. Image resolution of both are : 1920 * 931, as attached image1: baidu1 image2: baidu2

    bug help wanted 
    opened by alexbai326 17
  • Logo proposal

    Logo proposal

    Hello @romankh3, i am a graphic designer. I would like to know if you would be interested in me making a logo for this project. If you would have me, i would make a logo for you, and it's free.

    opened by dee-y 14
  • Add test for images with different jpeg-compression level

    Add test for images with different jpeg-compression level

    Hello Roman! Can you, please, add tests for images with different jpeg-compression? I believe many people who often work with jpeg will have this question. When someone made changes in the image in programs like Photoshop or Gimp and save image as jpg file, s/he needs to choose the compression level (good quality and large file weight or visa versa, from 0 to 100%). The compression algorithm makes some changes in pixels of the original image. When compression is near 60-70 quality lowering not much visible for human eyes tho, but still can be tangible for your algorithm even with a 10% sensitivity threshold. So the question is will compression be a problem? Will high compression prevent your library work as expected?

    I made some images for 4 tests. Every test is in separate dir which contains an original image that needs to be compared with other 3-4 one by one. Each image has a different quality: original - original with some changes - 60 - 20 - 0 (it's written in the filename). Images in the first dir don't have any 'human-made' difference just compression by itself. And the last test is for text-image, I think it's a very interesting case too. images_for_test.zip

    good first issue 
    opened by Hexronimo 12
  • Questions about flaky comparison results

    Questions about flaky comparison results

    Hello,

    I use your tool and it had worked great for me until now. Here Is my scenario. I have an app that is going through an upgrade.

    1. I make screenshots using Selenium for several pages and store them as baseline images (before the upgrade).
    2. I run my app after the upgrade and make screenshots of the same pages
    3. I compare on the fly each new and old/baseline pages and use .setAllowingPercentOfDifferentPixels(10)
    4. Sometimes my result is MATCH or MISMATCH or SIZE_MISMATCH and its' random

    What can you suggest to make it work stable? Oh, differences in fact are minimal. I use the Chrome browser to run my app

    Your help will be greatly appreciated

    Thanks a lot in advance

    Jeff

    question 
    opened by jradom 11
  • Allow program to run as a traditional CLI

    Allow program to run as a traditional CLI

    In this PR, I 've added a simple ArgsParser class to allow user to pass in options to the program, so that they can compare two images from image files they pass in as arguments. The user can also give a file where the result should be saved to. Not providing an output file makes the program open the UI, as it does currently.

    I also made the jar created by Gradle be runnable (by adding the Main-Class entry to the manifest), so now you can run the program with java -jar image-comparison.jar.

    opened by renatoathaydes 11
  • [QUESTION] getDifferencePercent meaning

    [QUESTION] getDifferencePercent meaning

    Hi @romankh3 ! Could you please clarify how the differencePercent is calculated? I compare these 2 images: SNAPSHOT_10-08-2020_18_42_24 and SNAPSHOT_10-08-2020_18_42_31 and got the result: result Then I trying to use something like: return (imageComparisonResult.getDifferencePercent() <= diffPercentage)

    I expected getDifferencePercent is calculated like total square of all difference rectangles vs image square, like: Sum (S<i = 1..n> S) / S ~ 15% for my images.

    But surprisingly I got 0.0! Could you please clarify where I'm wrong? Thanks in advance!

    question 
    opened by dmiroshnyk 10
  • Added option to resize image if size mis-match

    Added option to resize image if size mis-match

    I am using the the image-comparison library in mobile visual test automation and in some cases even with size mismatch it's practical to do the comparison despite the size difference that's in case of the design will keep it's ratio.

    another case the difference sometimes could be small number of pixels so that I find it very useful that we have an option to resize the actual image to the expected dimensions and then do the comparison.

    wating for your opinion and many thanks.

    -Added overloaded function of compareImages(boolean resizeIfSizeMisMatch) to enable resizing to expected dimensions. -Added resize function to utils.

    enhancement 
    opened by KhaldAttya 10
  • [BUG] mergeRectangles hangs

    [BUG] mergeRectangles hangs

    Describe the bug The program hangs forever.

    To Reproduce Steps to reproduce the behavior:

    1. Download attached zip and extract the 2 image files anywhere. files.zip
    2. Run this code:

    ImageComparison comparison = new ImageComparison("output_153.png", "output_154.png"); comparison.createMask(); // hangs forever

    Expected behavior Program should run and exit appropriately.

    Screenshots See attached zip above

    Java

    • OS: Windows
    • openjdk version "1.8.0_252"

    Additional context I managed to trace this to the method mergeRectangles. I don't know why it hangs, but I debugged it and the (minimum and maximum rectangles) are equal to the image size (width*height). I (thought I) fixed it (see my comment) by skipping running mergeRectangles in a special scenario:

    private List<Rectangle> populateRectangles() {
            long countOfDifferentPixels = populateTheMatrixOfTheDifferences();
    
            if (countOfDifferentPixels == 0) {
                return emptyList();
            }
    
            if (isAllowedPercentOfDifferentPixels(countOfDifferentPixels)) {
                return emptyList();
            }
            groupRegions();
            List<Rectangle> rectangles = new ArrayList<>();
    
            int minX = Integer.MAX_VALUE, minY = Integer.MAX_VALUE, maxX = Integer.MIN_VALUE, maxY = Integer.MIN_VALUE;
    
            while (counter <= regionCount) {
                Rectangle rectangle = createRectangle();
                if (!rectangle.equals(Rectangle.createDefault()) && rectangle.size() >= minimalRectangleSize) {
                    rectangles.add(rectangle);
                    Point min = rectangle.getMinPoint();
                    Point max = rectangle.getMaxPoint();
                    if (min.x < minX) minX = min.x;
                    if (min.y < minY) minY = min.y;
                    if (max.x > maxX) maxX = max.x;
                    if (max.y > maxY) maxY = max.y;
                }
                counter++;
            }
    
            if (minX == 0 && minY == 0 &&
                maxX == actual.getWidth() - 1 &&
                maxY == actual.getHeight() - 1)
                return Collections.singletonList(new Rectangle(0, 0, maxX, maxY));
    
            return mergeRectangles(rectangles);
        }
    

    (I don't feel comfortable making a pull request).

    bug 
    opened by HoverCatz 9
  • [IMPROVEMENT] fill excluded rectangles with transparent green

    [IMPROVEMENT] fill excluded rectangles with transparent green

    I add many excluded areas to my images and find it very useful that they appear as green rectangles on the results image. I often need to define long exclusions along edges of the image. In those cases, looking at the resulting image, it is not easy to determine which areas have been excluded, partly due to the fact that the green lines along the edges are cropped out of the picture.

    It would be less ambiguous if there was an option to fill the the green rectangles with a transparent green fill.

    enhancement 
    opened by MrMisterG 9
  • #145: Migrate to JUnit 5.

    #145: Migrate to JUnit 5.

    Should close issue #145.

    • Migrated from JUnit 4.12 to JUnit 5.5.2 (Jupiter).
    • Use JUnit exception handling instead of BaseTest#getException()
    • Updated the Gradle version from 3.5-rc-2-all to 6.0.1-bin. Starting with version 4.6, Gradle provides native support for executing tests on the JUnit Platform.
    • Fixed Maven warnings for plugins without a version number.
    • Fixed Maven warning about platform dependent file encoding.
    opened by Wandmalfarbe 7
  • getDifferencePercent fix (#233)

    getDifferencePercent fix (#233)

    PR Details

    Fix to getDifferencePercent method in ImageComparisonUtil

    Description

    The getDifferencePercent was calculating pixels incorrectly: instead of calculating each different pixels towards the overall counter, it was using an overall sum of differences. This PR fixes that.

    Related Issue

    https://github.com/romankh3/image-comparison/issues/233

    Motivation and Context

    getDifferencePercent can be used to retrieve exact % of differences for ignoring them in ImageComparisonResult config. This can be used to individually configure tests with different images to pass.

    How Has This Been Tested

    I have ran and updated the existing tests, and also added a new one which gets and sets percentage of differences. I have also tested these changes in my own project, which uses this library with Selenide for Web visual testing: https://github.com/nikmazur/ui-visual-testing

    Types of changes

    • [ ] Docs change / refactoring / dependency upgrade
    • [x] Bug fix (non-breaking change which fixes an issue)
    • [ ] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)

    Checklist

    • [x] My code follows the code style of this project.
    • [ ] My change requires a change to the documentation.
    • [ ] I have updated the documentation accordingly.
    • [x] I have read the CONTRIBUTING document.
    • [x] I have added tests to cover my changes.
    • [x] All new and existing tests passed.
    opened by nikmazur 0
  • Is there any support to android espresso/uiautomator, I tried but BufferedImage not supported in android

    Is there any support to android espresso/uiautomator, I tried but BufferedImage not supported in android

    tired other way to set images path but it does not support with makeDiff method. Is there any support for File path ? error is Cannot resolve symbol 'BufferedImage'

    enhancement 
    opened by Aasu29 2
  • [FEATURE] Compare image with Structural Similarity Index (SSIM)

    [FEATURE] Compare image with Structural Similarity Index (SSIM)

    Hi Roman

    Thank you for providing the comparison tool. It's useful for our work. besides that, Could you consider adding more comparison methods like SSIM (Structural Similarity Index)?

    Reference https://pyimagesearch.com/2017/06/19/image-difference-with-opencv-and-python/

    https://stackoverflow.com/questions/71567315/how-to-get-the-ssim-comparison-score-between-two-images

    https://github.com/americanexpress/jest-image-snapshot

    https://www.google.com/amp/s/discuss.dizzycoding.com/detect-and-visualize-differences-between-two-images-with-opencv-python/%3famp=1

    enhancement 
    opened by huemach78 0
  • [QUESTION] Difference Percentage Calculations Don't Match

    [QUESTION] Difference Percentage Calculations Don't Match

    I'm trying to understand why getDifferencePercent(BufferedImage img1, BufferedImage img2) on line 138 of the ImageComparisonUtil class is returning a different result than the percent calculated in line 313 of the ImageComparison class.

    The algorithm used to acquire the count of different pixels in populateTheMatrixOfTheDifferences() on line 234 seems to be similar to what's being done in getDifferencePercent(BufferedImage img1, BufferedImage img2) but the end result isn't the same.

    It seems like if I'm trying to set an allowed percentage difference using setAllowingPercentOfDifferentPixels() I can't use the output of getDifferencePercent as a gauge since that value doesn't match what's calculated during the image comparison inside isAllowedPercentOfDifferentPixels(long countOfDifferentPixels)

    question 
    opened by PeerHalvorsen 1
  • [FEATURE] GUI for convenience

    [FEATURE] GUI for convenience

    Thanks for providing this comparison tool. BTW, I notice that in issue#215, pacioc193 creates GUI for his comparing. FMPV, a concise and convenient GUI is what this tool needs at present. IT IS USEFUL, I NEED IT.

    enhancement 
    opened by Aurora4396 1
Releases(v4.4.0)
  • v4.4.0(Mar 28, 2021)

    ⭐️ New Features

    #205: based on #204 discussion, which created @woosyume added a new feature - update rectangle line color.

    I'd like to say thank you for your contributions: @woosyume for a new feature that suggested and implemented

    Source code(tar.gz)
    Source code(zip)
  • v4.3.1(Mar 13, 2021)

    🐞 Bug Fixes image-comparison became better:

    Fixed bug #201 - problem with comparing totally different pictures.

    ❤️ Contributors I'd like to say thank you for your contributions:

    @HoverCatz - thank you for your report of a new bug.

    Source code(tar.gz)
    Source code(zip)
  • v4.3.0(Sep 8, 2020)

    ⭐️ New Features

    • #192: Include rectangles with difference in comparison results (@akondas)
    • Improved and added missing tests (@AnthonyJungmann, @romankh3) 🐞 Bug Fixes
    • #196 [BUG] Set 0.0 difference percent for MISMATCH (@romankh3)

    ❤️ Contributors I'd like to say thank you for your contributions:

    • @akondas for a new feature
    • @AnthonyJungmann for a missing tests
    • @dmiroshnyk for finding a bug with differencePercent
    Source code(tar.gz)
    Source code(zip)
  • v4.2.1(Apr 17, 2020)

    🐞 Bug Fixes image-comparison became better:

    • Fixed bug #180 - problem with ImageComparisonUtil.readFromResources method.

    ❤️ Contributors I'd like to say thank you for your contributions:

    • @mrgoroua - thank you for your report a new bug.
    Source code(tar.gz)
    Source code(zip)
  • v4.2.0(Mar 11, 2020)

    New Features

    • #175: added the ability to ignore some percent of differences for comparison.

    Contributors I'd like to say thank you for your contributions

    • @jeffradom for your idea of a new feature for image-comparison
    Source code(tar.gz)
    Source code(zip)
  • v4.1.0(Jan 29, 2020)

    New Features

    • #167 fill excluded rectangles with transparent green(@MrMisterG)

    Contributors

    I'd like to say thank you for your contributions:

    • @MrMisterG - for proposing new feature and developing it with respect to the development process.
    Source code(tar.gz)
    Source code(zip)
  • v4.0.1(Jan 11, 2020)

    ⭐️ New Features

    • #154: migrated to JUnit 5(@Wandmalfarbe)

    🐞 Bug Fixes

    • #165: fixed bug with maximal rectangle count(@Hexronimo)

    ❤️ Contributors I'd like to say thank you for your contributions:

    • @Wandmalfarbe for providing the solution for #154
    • @Hexronimo for finding a bug #165
    Source code(tar.gz)
    Source code(zip)
  • v4.0.0(Dec 9, 2019)

    ⭐️ New Features

    • refactored drawRectangles method due to SRP.
    • optimized isDifferentPixels to improve the algorithm.
    • moved to Apache License 2.0
    • removed Point and used java.awt.Point instead
    • added Gradle.yml for GitHub actions
    • removed commandLine usage
    • renamed ComparisonResult to ImageComparisonResult
    • renamed ComparisonState to ImageComparisonState
    • added own RuntimeException for wrapping checked exception
    • added Gitter chat for communication.

    ❤️ Contributors @mw79, @xSAVIKx - thanks for ideas, which you provided for this release.

    Source code(tar.gz)
    Source code(zip)
  • v3.3.1(Nov 4, 2019)

    🐞 Bug Fixes

    • #134: If the image is different in a line in 1 px, ComparisonState is always MATCH(@grigaman)
    • #136: deepCopy method throws IllegalArgumentException on shared BufferedImage(@grigaman)

    ❤️ Contributors

    I'd like to say thank you for your contributions:

    • @grigaman
    Source code(tar.gz)
    Source code(zip)
  • v3.3.0(Sep 2, 2019)

    ⭐️ New Features

    • Added option to get the pixels difference percentage between images in case of SIZE_MISMATCH.(@KhaldAttya)
    • Added configuration part to README.md.

    🐞 Bug Fixes

    • #89: Fixed NPE for default run from the command line(@KyryloKh)

    ❤️ Contributors I'd like to say thank you for your contributions:

    • @KhaldAttya
    • @KyryloKh

    :octocat: Reviewers

    • @SmashSide
    • @kremenec
    Source code(tar.gz)
    Source code(zip)
  • 3.2.0(Aug 4, 2019)

    ⭐️ New Features

    • Added ability to change pixel tolerance level.
    • Improved algorithm to make it faster.
    • Improved JavaDocs.
    • Researched JPEG images, all work as expected.
    Source code(tar.gz)
    Source code(zip)
  • 3.1.1(Jun 4, 2019)

  • 3.1.0(Jun 4, 2019)

    ⭐️ New Features

    • Added the ability to draw excluded areas on the result image. Rectangles with the differences drawing RED color. Rectangles of the excluded areas - GREEN color.

    • Fixed root problem on the algorithm.

    • Added returning this for setters in ImageComparison and ComparisonResult.

    • renamed image1 => expected and image2 => actual.

    • Added writeResultTo() for ComparisonResult.

    Source code(tar.gz)
    Source code(zip)
  • 3.0.1(Jun 1, 2019)

  • 3.0.0(May 29, 2019)

    ⭐️ New Features

    • Added ComparisonResult as a returning value for comparing. It contains:
      • image1
      • image2
      • ComparisonState, with conditions MATCH, MISMATCH, SIZE_MISMATCH
      • Result image, only if ComparisonState is MISMATCH. When it is MATCH or SIZE_MISMATCH no needs to create result image.
    • added minimalRectangleSize and maximalRectangleCount(sorted by rectangle size).
    • Added more tests to cover more test cases.
    • Refactored CommandLineUsage, moved main() method to separated class.(@ak98neon)
    • Added ExcludedAreas functionality, which helps to exclude some parts of the image.(@mkytolai)

    ❤️ Contributors I'd like to say thank you for your contributions

    • @mkytolai
    • @ak98neon

    :octocat: Reviewers

    • @ak98neon
    • @smashside
    • @kremenec
    • @KyryloKh
    Source code(tar.gz)
    Source code(zip)
  • 2.2.0(May 14, 2019)

    ⭐️ New Features

    • Added ability to customize rectangle line width(@mkytolai).
    • Moved the main method from Image Comparison to own class(@ak98neon).
    • Added Code of Conduct and Contributing pages(@romankh3).
    • Added Point model(@romankh3).

    🐞 Bug Fixes

    • Made non-static threshold field(@ak98neon).

    ❤️ Contributors I'd like to thank all the contributors who helped to improve it:

    • @mkytolai
    • @ak98neon
    Source code(tar.gz)
    Source code(zip)
  • 2.1.0(Apr 15, 2019)

    ⭐️ New Features

    • Published the project to JCenter, MavenCentral
    • Update packages related to groupId.

    🐞 Bug Fixes

    All the bugs were successfully fixed on 2.0.2 version.

    ❤️ Contributors

    I'd like to say thank @renatoathaydes! He helped me to publish image-comparison.

    Source code(tar.gz)
    Source code(zip)
  • 2.0.2(Apr 10, 2019)

    ⭐️ New Features

    • Improved comparison algorithm.
    • Improved tests cases and test coverage to 100%.

    🐞 Bug Fixes

    • #11: Rectangles can overlap and be included one-into-one.
    • #21: StackOverflowError when compared 2 images with a little big different area.
    • #43: Added extra overlapping based on fixing #21 bug.

    ❤️ Contributors I'd like to thank all the contributors who helped to improve it!

    • @renatoathaydes
    • @alexbai326
    • @pvarenik
    • @gao2q
    • @kremenec
    • @dee-y
    Source code(tar.gz)
    Source code(zip)
  • V2.0(Oct 25, 2018)

  • v1.0(Aug 10, 2017)

    The program in Java that compares any 2 images and shows the differences visually by drawing rectangles.

    • Implementation is using only standard core language and platform features, no 3rd party libraries and plagiarized code is permitted.
    • Pixels (with the same coordinates in two images) can be visually similar, but have different values of RGB. We are only consider 2 pixels to be "different" if the difference between them is more than 10%.
    • The output of the comparison is a copy of one of the images image with differences outlined with red rectangles as shown below.
    • No third party libraries and borrowed code are not using.
    Source code(tar.gz)
    Source code(zip)
Owner
Roman Beskrovnyi
Sr. Software Engineer. Open source contributor. Happy father of two. Join IT telegram-channel https://t.me/romankh3
Roman Beskrovnyi
Simple Java image-scaling library implementing Chris Campbell's incremental scaling algorithm as well as Java2D's "best-practices" image-scaling techniques.

imgscalr - Java Image-Scaling Library http://www.thebuzzmedia.com/software/imgscalr-java-image-scaling-library/ Changelog --------- 4.2 * Added sup

Riyad Kalla 1.1k Jan 5, 2023
Diagrams as code is a term used for storing the source of a diagram image as a text file.

Diagrams as code Diagrams as code is a term used for storing the source of a diagram image as a text file. Examples are architecture diagrams, or diag

null 26 Nov 21, 2022
Creates ASCII art in Java from Images

Creates ASCII art in Java from Images. It can also save the ASCII art as image (.png) as well

Navjot Singh Rakhra 4 Jul 12, 2022
Fast computer vision library for SFM, calibration, fiducials, tracking, image processing, and more.

Table of Contents Introduction Cloning Repository Quick Start Gradle and Maven Building from Source Dependencies Help/Contact Introduction BoofCV is a

Peter Abeles 916 Jan 6, 2023
VisionCamera Frame Processor Plugin to label images using MLKit Vision

vision-camera-image-labeler A VisionCamera Frame Processor Plugin to label images using MLKit Vision Image Labeling. Installation npm install vision-c

Marc Rousavy 72 Dec 20, 2022
A VisionCamera Frame Processor Plugin to preform text detection on images using MLKit Vision Text Recognition

vision-camera-ocr A VisionCamera Frame Processor Plugin to preform text detection on images using MLKit Vision Text Recognition. Installation yarn add

Aaron Grider 133 Dec 19, 2022
A well-designed local image and video selector for Android

Matisse Matisse is a well-designed local image and video selector for Android. You can Use it in Activity or Fragment Select images including JPEG, PN

Zhihu 12.4k Dec 29, 2022
Provide image storage and access services.

Provide image storage and access services.

shiyq 2 Jan 23, 2022
Custom Image Server for use with ShareX

rImageServer How to use: Normal Instalation: Download .jar Start: javar -jar [filename].jar Edit: imageserver.propierties Check if web works -> Go to

Ryzeon 11 May 21, 2022
Luban—Image compression with efficiency very close to WeChat Moments

Luban—Image compression with efficiency very close to WeChat Moments

郑梓斌 13.1k Dec 29, 2022
Usign ascii characters, recreate an image following a local path

CMDImage Usign ascii characters, recreate an image following a local path README El código toma una imagen desde una ruta local para convertirlo en ca

Alexander Hernández 13 Aug 30, 2022
Thumbnailator - a thumbnail generation library for Java

March 11, 2021: Thumbnailator 0.4.14 has been released! See Changes for details. Thumbnailator is now available through Maven! What is Thumbnailator?

Chris Kroells 4.5k Jan 5, 2023
ZXing ("Zebra Crossing") barcode scanning library for Java, Android

Project in Maintenance Mode Only The project is in maintenance mode, meaning, changes are driven by contributed patches. Only bug fixes and minor enha

ZXing Project 30.5k Jan 4, 2023
Java library for remapper JARs

Pocolifo's JAR Remapper Making remapping JARs easy, organized, and painless Features Remapping Class remapping Method remapping Field remapping Parame

null 8 Oct 2, 2022
A Java Visualization Library based on Apache ECharts.

ECharts Java "We bring better visualization into Java with ECharts" ?? Introduction ECharts Java is a lightweight but comprehensive library for Java d

ECharts Java Open Source Project 171 Dec 31, 2022
Java interface to OpenCV, FFmpeg, and more

JavaCV Commercial support: Introduction JavaCV uses wrappers from the JavaCPP Presets of commonly used libraries by researchers in the field of comput

Bytedeco 6.4k Jan 4, 2023
TwelveMonkeys ImageIO: Additional plug-ins and extensions for Java's ImageIO

About TwelveMonkeys ImageIO is a collection of plugins and extensions for Java's ImageIO. These plugins extend the number of image file formats suppor

Harald Kuhr 1.6k Jan 5, 2023