You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Drawing a polygon using ImageDraw.polygon and an ellipse using ImageDraw.ellipse with no outline specified, with an opaque outline, and with a semi-transparent outline.
Looking at the polygon, if no outline is specified (top left image), we see that the black line is visible, which is one of the polygon's borders. Specifying an opaque outline (top center image), the black line's no longer visible. Setting a semi-transparent outline (top right image) reveals, that the outline is identical to the polygon's border.
Now, the same for the ellipse: If no outline is set (top left), an outline is shown nevertheless, most likely the same color as used for the fill parameter, but without incorporating an alpha value. Setting an opaque outline (top center) "overwrites" the unexpected existent outline, but when setting a semi-transparent outline, we see that the unexpected outline is still there.
This effect becomes even more obvious, when setting width > 1 in ellipse, see the bottom row. The unexpected outline still seems to have width = 1, whereas the explicitly set outline has width = 5.
Making 'opaque outlines' and 'semi-transparent outlines' behave the same as 'no outlines' specified is easy enough -
def ellipse(self, xy, fill=None, outline=None, width=0):
"""Draw an ellipse."""
ink, fill = self._getink(outline, fill)
if fill is not None:
self.draw.draw_ellipse(xy, fill, 1)
- if ink is not None and ink != fill:+ if ink is not None and ink != fill and width != 0:
self.draw.draw_ellipse(xy, ink, 0, width)
However, 'no outlines' may be more difficult, as it is sort of a known problem -
I have created PR #4333 and #4334. #4333 will remove the darker outline using the fill colour, and #4334 will stop the application of the specified outline colour for a zero width.
Could I clarify - you have no problem with the behaviour of polygon, yes? Just ellipse? If both are merged to create the attached image, then this issue is resolved?
@radarhere Correct, polygon works as I would've expected. And, yes, issue's resolved then. Thank you very much for your effort! (And, sorry for not responding back in December, these holidays...)
What did you do?
Drawing a polygon using
ImageDraw.polygon
and an ellipse usingImageDraw.ellipse
with no outline specified, with an opaque outline, and with a semi-transparent outline.What did you expect to happen?
ImageDraw.polygon
andImageDraw.ellipse
should behave the same for the mentioned cases.What actually happened?
The output created by the code below:
Looking at the polygon, if no outline is specified (top left image), we see that the black line is visible, which is one of the polygon's borders. Specifying an opaque outline (top center image), the black line's no longer visible. Setting a semi-transparent outline (top right image) reveals, that the outline is identical to the polygon's border.
Now, the same for the ellipse: If no outline is set (top left), an outline is shown nevertheless, most likely the same color as used for the
fill
parameter, but without incorporating an alpha value. Setting an opaque outline (top center) "overwrites" the unexpected existent outline, but when setting a semi-transparent outline, we see that the unexpected outline is still there.This effect becomes even more obvious, when setting
width > 1
inellipse
, see the bottom row. The unexpected outline still seems to havewidth = 1
, whereas the explicitly set outline haswidth = 5
.What are your OS, Python and Pillow versions?
The text was updated successfully, but these errors were encountered: