Apply dither when converting/quantizing to an adaptive palette - #9859
Open
83Gh0st wants to merge 1 commit into
Open
Apply dither when converting/quantizing to an adaptive palette#985983Gh0st wants to merge 1 commit into
83Gh0st wants to merge 1 commit into
Conversation
Fixes python-pillow#5836. dither was silently ignored whenever no reference palette was given, since the underlying quantize() has no dither support without one. Now re-converts through the computed palette when dithering is explicitly requested.
radarhere
reviewed
Aug 12, 2026
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.
Fixes #5836.
ditherwas silently ignored whenever no referencepalettewas given (e.g.im.convert("P", palette=Image.Palette.ADAPTIVE, dither=...)or plainim.quantize(dither=...)), because the underlyingself.im.quantize()C call has no dithering support without an explicit reference palette. This re-converts through the computed adaptive palette when dithering is explicitly requested, soditheris honored in bothconvert()andquantize(). Calls that don't passditherare unaffected.Changes proposed in this pull request:
Image.convert(..., palette=Palette.ADAPTIVE, dither=...)Image.quantize(..., dither=...)when no reference palette is given