Merge pull request #7891 from radarhere/kmeans

Raise ValueError if kmeans is negative
This commit is contained in:
mergify[bot] 2024-03-22 22:02:42 +00:00 committed by GitHub
commit 759630fbaf
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 20 additions and 3 deletions

View File

@ -94,6 +94,19 @@ def test_quantize_dither_diff() -> None:
assert dither.tobytes() != nodither.tobytes() assert dither.tobytes() != nodither.tobytes()
@pytest.mark.parametrize(
"method", (Image.Quantize.MEDIANCUT, Image.Quantize.MAXCOVERAGE)
)
def test_quantize_kmeans(method) -> None:
im = hopper()
no_kmeans = im.quantize(kmeans=0, method=method)
kmeans = im.quantize(kmeans=1, method=method)
assert kmeans.tobytes() != no_kmeans.tobytes()
with pytest.raises(ValueError):
im.quantize(kmeans=-1, method=method)
def test_colors() -> None: def test_colors() -> None:
im = hopper() im = hopper()
colors = 2 colors = 2

View File

@ -1141,7 +1141,7 @@ class Image:
The exception to this is RGBA images. :data:`Quantize.MEDIANCUT` The exception to this is RGBA images. :data:`Quantize.MEDIANCUT`
and :data:`Quantize.MAXCOVERAGE` do not support RGBA images, so and :data:`Quantize.MAXCOVERAGE` do not support RGBA images, so
:data:`Quantize.FASTOCTREE` is used by default instead. :data:`Quantize.FASTOCTREE` is used by default instead.
:param kmeans: Integer :param kmeans: Integer greater than or equal to zero.
:param palette: Quantize to the palette of given :param palette: Quantize to the palette of given
:py:class:`PIL.Image.Image`. :py:class:`PIL.Image.Image`.
:param dither: Dithering method, used when converting from :param dither: Dithering method, used when converting from
@ -1184,6 +1184,10 @@ class Image:
new_im.palette = palette.palette.copy() new_im.palette = palette.palette.copy()
return new_im return new_im
if kmeans < 0:
msg = "kmeans must not be negative"
raise ValueError(msg)
im = self._new(self.im.quantize(colors, method, kmeans)) im = self._new(self.im.quantize(colors, method, kmeans))
from . import ImagePalette from . import ImagePalette

View File

@ -1471,7 +1471,7 @@ quantize(
fflush(stdout); fflush(stdout);
timer = clock(); timer = clock();
#endif #endif
if (kmeans) { if (kmeans > 0) {
k_means(pixelData, nPixels, p, nPaletteEntries, qp, kmeans - 1); k_means(pixelData, nPixels, p, nPaletteEntries, qp, kmeans - 1);
} }
#ifndef NO_OUTPUT #ifndef NO_OUTPUT
@ -1627,7 +1627,7 @@ quantize2(
pixelData, nPixels, p, nQuantPixels, avgDist, avgDistSortKey, qp)) { pixelData, nPixels, p, nQuantPixels, avgDist, avgDistSortKey, qp)) {
goto error_4; goto error_4;
} }
if (kmeans) { if (kmeans > 0) {
k_means(pixelData, nPixels, p, nQuantPixels, qp, kmeans - 1); k_means(pixelData, nPixels, p, nQuantPixels, qp, kmeans - 1);
} }