Форум сайта python.su
0
Нужно расширить класс PIL.ImageDraw.ImageDraw и создать его наследника ImageDrawer.
От нового класса требуется реализовать два новых метода: circle(center, radius, fill, outline, width) и square(xy, side, fill, outline, width).
Метод circle предназначен для отрисовки окружности с заданным центром (параметр center в форме кортежа из двух чисел) и радиусом (параметр radius в виде одного числа).
Метод square предназначен для отрисовки квадрата с заданным верхним левым углом (параметр xy в форме кортежа из двух чисел) и стороной (параметр side в виде одного числа).
Параметры fill (цвет заливки), outline (цвет границы), width (толщина границы) у обоих методов являются необязательными. Задайте им значение по умолчанию «в духе» PIL.ImageDraw.ImageDraw.
Решение должно содержать только требуемый класс, ничего вызывать не надо.
ПРИМЕЧАНИЕ:
В примерах в качестве ввода представлены параметры будущего изображения:
• size — размер будущей картинки;
• background — цвет фона;
• circles — список, содержащий параметры каждой окружности, которую требуется отрисовать;
• square — список, содержащий параметры каждого квадрата, который требуется отрисовать.
ПРИМЕР 1,1:
Ввод:
{ ‘background’: ‘white’,
‘circles’: [ { ‘center’: (50, 50),
‘outline’: ‘blue’,
‘radius’: 20,
‘width’: 3},
{ ‘center’: (92, 50),
‘outline’: ‘black’,
‘radius’: 20,
‘width’: 3},
{ ‘center’: (134, 50),
‘outline’: ‘red’,
‘radius’: 20,
‘width’: 3},
{ ‘center’: (71, 70),
‘outline’: ‘yellow’,
‘radius’: 20,
‘width’: 3},
{ ‘center’: (113, 70),
‘outline’: ‘green’,
‘radius’: 20,
‘width’: 3}],
‘size’: (184, 120)}
(вывод картинкой в документе с именем “Пример 1,1”)
ПРИМЕР 1,1:
Ввод:
{ ‘size’: (150, 50),
‘squares’: [ {'fill': ‘red’, ‘side’: 50, ‘xy’: (0, 0)},
{'fill': ‘green’, ‘side’: 50, ‘xy’: (50, 0)},
{'fill': ‘blue’, ‘side’: 50, ‘xy’: (100, 0)}]}
(вывод картинкой в документе с именем “Пример 1,2”)
ЗАРАНЕЕ СПАСИБО)
Прикреплённый файлы:
ПРИМЕРЫ.png (8,5 KБ)
Офлайн
857
Здесь сначала нужно понять, как это нарисовать с помощью объекта PIL.ImageDraw.ImageDraw(), а потом уже, наследуясь от этого класса, использовать внутри новых методов его методы.
Вот инфа, как использовать методы объекта
https://pillow.readthedocs.io/en/3.0.x/reference/ImageDraw.html#PIL.ImageDraw.PIL.ImageDraw.Draw.ellipse
Для окружности используется метод ellipse(), так как окружность - это частный случай эллипса, как квадрат - частный случай параллелограмма.
PIL.ImageDraw.Draw.ellipse(xy, fill=None, outline=None)
Draws an ellipse inside the given bounding box.
Parameters:
xy – Four points to define the bounding box. Sequence of either [(x0, y0), (x1, y1)] or [x0, y0, x1, y1].
outline – Color to use for the outline.
fill – Color to use for the fill.
Отредактировано py.user.next (Апрель 23, 2019 06:30:38)
Офлайн