mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-11-10 19:56:47 +03:00
Merge pull request #8085 from void4/imagedraw_circle
This commit is contained in:
commit
fdf103c5ad
|
@ -2,6 +2,7 @@ from __future__ import annotations
|
||||||
|
|
||||||
import contextlib
|
import contextlib
|
||||||
import os.path
|
import os.path
|
||||||
|
from typing import Sequence
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
@ -265,6 +266,21 @@ def test_chord_too_fat() -> None:
|
||||||
assert_image_equal_tofile(im, "Tests/images/imagedraw_chord_too_fat.png")
|
assert_image_equal_tofile(im, "Tests/images/imagedraw_chord_too_fat.png")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("mode", ("RGB", "L"))
|
||||||
|
@pytest.mark.parametrize("xy", ((W / 2, H / 2), [W / 2, H / 2]))
|
||||||
|
def test_circle(mode: str, xy: Sequence[float]) -> None:
|
||||||
|
# Arrange
|
||||||
|
im = Image.new(mode, (W, H))
|
||||||
|
draw = ImageDraw.Draw(im)
|
||||||
|
expected = f"Tests/images/imagedraw_ellipse_{mode}.png"
|
||||||
|
|
||||||
|
# Act
|
||||||
|
draw.circle(xy, 25, fill="green", outline="blue")
|
||||||
|
|
||||||
|
# Assert
|
||||||
|
assert_image_similar_tofile(im, expected, 1)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("mode", ("RGB", "L"))
|
@pytest.mark.parametrize("mode", ("RGB", "L"))
|
||||||
@pytest.mark.parametrize("bbox", BBOX)
|
@pytest.mark.parametrize("bbox", BBOX)
|
||||||
def test_ellipse(mode: str, bbox: Coords) -> None:
|
def test_ellipse(mode: str, bbox: Coords) -> None:
|
||||||
|
|
|
@ -227,6 +227,18 @@ Methods
|
||||||
|
|
||||||
.. versionadded:: 5.3.0
|
.. versionadded:: 5.3.0
|
||||||
|
|
||||||
|
.. py:method:: ImageDraw.circle(xy, radius, fill=None, outline=None, width=1)
|
||||||
|
|
||||||
|
Draws a circle with a given radius centering on a point.
|
||||||
|
|
||||||
|
.. versionadded:: 10.4.0
|
||||||
|
|
||||||
|
:param xy: The point for the center of the circle, e.g. ``(x, y)``.
|
||||||
|
:param radius: Radius of the circle.
|
||||||
|
:param outline: Color to use for the outline.
|
||||||
|
:param fill: Color to use for the fill.
|
||||||
|
:param width: The line width, in pixels.
|
||||||
|
|
||||||
.. py:method:: ImageDraw.ellipse(xy, fill=None, outline=None, width=1)
|
.. py:method:: ImageDraw.ellipse(xy, fill=None, outline=None, width=1)
|
||||||
|
|
||||||
Draws an ellipse inside the given bounding box.
|
Draws an ellipse inside the given bounding box.
|
||||||
|
|
|
@ -45,6 +45,13 @@ TODO
|
||||||
API Additions
|
API Additions
|
||||||
=============
|
=============
|
||||||
|
|
||||||
|
ImageDraw.circle
|
||||||
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Added :py:meth:`~PIL.ImageDraw.ImageDraw.circle`. It provides the same functionality as
|
||||||
|
:py:meth:`~PIL.ImageDraw.ImageDraw.ellipse`, but instead of taking a bounding box, it
|
||||||
|
takes a center point and radius.
|
||||||
|
|
||||||
TODO
|
TODO
|
||||||
^^^^
|
^^^^
|
||||||
|
|
||||||
|
|
|
@ -181,6 +181,13 @@ class ImageDraw:
|
||||||
if ink is not None and ink != fill and width != 0:
|
if ink is not None and ink != fill and width != 0:
|
||||||
self.draw.draw_ellipse(xy, ink, 0, width)
|
self.draw.draw_ellipse(xy, ink, 0, width)
|
||||||
|
|
||||||
|
def circle(
|
||||||
|
self, xy: Sequence[float], radius: float, fill=None, outline=None, width=1
|
||||||
|
) -> None:
|
||||||
|
"""Draw a circle given center coordinates and a radius."""
|
||||||
|
ellipse_xy = (xy[0] - radius, xy[1] - radius, xy[0] + radius, xy[1] + radius)
|
||||||
|
self.ellipse(ellipse_xy, fill, outline, width)
|
||||||
|
|
||||||
def line(self, xy: Coords, fill=None, width=0, joint=None) -> None:
|
def line(self, xy: Coords, fill=None, width=0, joint=None) -> None:
|
||||||
"""Draw a line, or a connected sequence of line segments."""
|
"""Draw a line, or a connected sequence of line segments."""
|
||||||
ink = self._getink(fill)[0]
|
ink = self._getink(fill)[0]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user