diff --git a/Tests/test_imagedraw.py b/Tests/test_imagedraw.py index 6755d94b8..59af64bba 100644 --- a/Tests/test_imagedraw.py +++ b/Tests/test_imagedraw.py @@ -1452,3 +1452,11 @@ def test_discontiguous_corners_polygon(): ) expected = os.path.join(IMAGES_PATH, "discontiguous_corners_polygon.png") assert_image_similar_tofile(img, expected, 1) + + +def test_polygon(): + im = Image.new("RGB", (W, H)) + draw = ImageDraw.Draw(im) + draw.polygon([(18, 30), (19, 31), (18, 30), (85, 30), (60, 72)], "red") + expected = "Tests/images/imagedraw_outline_polygon_RGB.png" + assert_image_similar_tofile(im, expected, 1) diff --git a/src/libImaging/Draw.c b/src/libImaging/Draw.c index 86cd6c3a0..2fcd38048 100644 --- a/src/libImaging/Draw.c +++ b/src/libImaging/Draw.c @@ -513,7 +513,9 @@ polygon_generic(Imaging im, int n, Edge *e, int ink, int eofill, hline_handler h continue; } // Check if the two edges join to make a corner - if (xx[j-1] == (ymin - other_edge->y0) * other_edge->dx + other_edge->x0) { + if (((ymin == current->ymin && ymin == other_edge->ymin) || + (ymin == current->ymax && ymin == other_edge->ymax)) && + xx[j-1] == (ymin - other_edge->y0) * other_edge->dx + other_edge->x0) { // Determine points from the edges on the next row // Or if this is the last row, check the previous row int offset = ymin == ymax ? -1 : 1;