diff --git a/Tests/test_image.py b/Tests/test_image.py index 9e664a7c8..89894c9a7 100644 --- a/Tests/test_image.py +++ b/Tests/test_image.py @@ -454,6 +454,17 @@ class TestImage: with Image.open("Tests/images/effect_spread.png") as im3: assert_image_similar(im2, im3, 110) + def test_effect_spread_zero(self): + # Arrange + im = hopper() + distance = 0 + + # Act + im2 = im.effect_spread(distance) + + # Assert + assert_image_equal(im, im2) + def test_check_size(self): # Checking that the _check_size function throws value errors when we want it to with pytest.raises(ValueError): diff --git a/src/libImaging/Effects.c b/src/libImaging/Effects.c index b9ff889d2..e0f1d0339 100644 --- a/src/libImaging/Effects.c +++ b/src/libImaging/Effects.c @@ -131,15 +131,23 @@ ImagingEffectSpread(Imaging imIn, int distance) } #define SPREAD(type, image)\ - for (y = 0; y < imOut->ysize; y++) {\ - for (x = 0; x < imOut->xsize; x++) {\ - int xx = x + (rand() % distance) - distance/2;\ - int yy = y + (rand() % distance) - distance/2;\ - if (xx >= 0 && xx < imIn->xsize && yy >= 0 && yy < imIn->ysize) {\ - imOut->image[yy][xx] = imIn->image[y][x];\ - imOut->image[y][x] = imIn->image[yy][xx];\ - } else {\ - imOut->image[y][x] = imIn->image[y][x];\ + if (distance == 0) {\ + for (y = 0; y < imOut->ysize; y++) {\ + for (x = 0; x < imOut->xsize; x++) {\ + imOut->image[y][x] = imIn->image[y][x];\ + }\ + }\ + } else {\ + for (y = 0; y < imOut->ysize; y++) {\ + for (x = 0; x < imOut->xsize; x++) {\ + int xx = x + (rand() % distance) - distance/2;\ + int yy = y + (rand() % distance) - distance/2;\ + if (xx >= 0 && xx < imIn->xsize && yy >= 0 && yy < imIn->ysize) {\ + imOut->image[yy][xx] = imIn->image[y][x];\ + imOut->image[y][x] = imIn->image[yy][xx];\ + } else {\ + imOut->image[y][x] = imIn->image[y][x];\ + }\ }\ }\ }