Skip to content

Conversation

@tinder-owenthomas
Copy link

@tinder-owenthomas tinder-owenthomas commented Dec 11, 2020

Optimized images (such as those generated by pngcrush) contain the same image in many fewer bytes of data. One of the optimizations can convert an image from the normal 4 color channels to only 2 if there are few enough colors in an image (such as images that only use black, white, and gray). This causes fewer color components therefore fewer bits per row. This in turn causes the current image comparison calculation to fail even though the images contain identical pixels because the amount of memory they consume is different.

This update makes sure the CGBitmapContext is created with the same amount of memory for both images being compared, even though it is technically unnecessary for the optimized image. In this way, the raw memory of the resulting image pixels drawn into the contexts is still identical and easily comparable.

This change will allow us to crush all the snapshot images in our repo, saving us hundreds of MB of files on every clone into CI and CD.

This PR also adds 2 new tests to verify that optimized images can be compared with unoptimized, and the other way around. This requires the addition of one new image (rect_crushed.png) which is a crushed version of rect.png using default pngcrush options which reduces the file size by ~67% while retaining identical pixel information.

@tinder-owenthomas
Copy link
Author

@reidmain As an outside contributor I the repo will not allow me to add requested reviewers. I'm curious to know if there's anything else needed from me in order to get this PR considered? Please let me know.

@alanzeino
Copy link
Collaborator

@reidmain As an outside contributor I the repo will not allow me to add requested reviewers. I'm curious to know if there's anything else needed from me in order to get this PR considered? Please let me know.

Happy to review, maybe you can rebase against latest so we can run the CI on this to see if it breaks the integration tests we have.

Optimized images may contain the same image, but fewer color components and therefore fewer bits per row. This causes the current image comparison to fail even though the image is otherwise identical.
@tinder-owenthomas tinder-owenthomas force-pushed the oht/allow-comparison-of-optimized-pngs-with-unoptimized-pngs branch from 934dc4f to 8e9c24f Compare October 22, 2021 20:34
@tinder-owenthomas
Copy link
Author

Sorry @alanzeino, just saw your comment now. I've updated from latest main. Hopefully everything will pass

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants