When saving GIF frame that restores to background color, do not fill identical pixels#7788
Merged
hugovk merged 2 commits intopython-pillow:mainfrom Mar 11, 2024
Merged
Conversation
Member
Author
|
In my first commit here, I used the previous frame's disposal when considered whether the current frame should be compared to the background color or not. However, the current frame's disposal was being used when generating background color frame for comparison. Pillow/src/PIL/GifImagePlugin.py Lines 632 to 640 in 6782a07 This is incorrect, and so I've pushed another commit with a new test. Disposal refers to how the current frame will be treated when you have moved on to the next one - how the current frame is disposed of. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Resolves #7787
#7568 set identical pixels in subsequent GIF frames to be transparency.
This new issue has found that for disposal 2, when GIF disposes the previous frame and restores it to the background color, filling the identical pixels with transparency results in those pixels being seen as transparent by viewers.
This PR skips the optimisation step of filling identical pixels when the previous frame is restored to the background colour, as it is unnecessary when the frame is being compared with a single color (the background). The filling of pixels that match the previous frame is only an optimisation when it is reducing multiple possible matching colors to one color.