Программирование графики на Python: создание изображений

Раздел: Графические интерфейсы -> Рисование

Коды рисунков на Python: от простых фигур до сложной графики

Наиболее эффективным решением для быстрого создания рисунков является использование встроенной библиотеки turtle. Она позволяет управлять «черепашкой», которая рисует линии при движении по холсту. Подходит для обучения, прототипирования и построения геометрических узоров.

import turtle
t = turtle.Turtle()
t.speed(5)
t.forward(100)
t.right(90)
t.forward(100)
t.right(90)
t.forward(100)
t.right(90)
t.forward(100)
turtle.done()

Python коды рисунков (коды рисунков на python)

Этот код создаёт квадрат со стороной 100 пикселей. Черепаха начинает в центре окна, двигается вперёд, поворачивает на 90 градусов и повторяет действия. После выполнения вызывается turtle.done(), чтобы окно не закрылось.

Типичная ошибка: окно turtle закрывается мгновенно, если не вызвать turtle.done() или turtle.exitonclick(). Решение: добавить одну из этих команд в конец скрипта.

Проблема: фигура рисуется слишком медленно или слишком быстро. Исправляется настройкой t.speed(0) для максимальной скорости или t.speed(1) для медленной анимации.

Цель использования: изучение основ координат, циклов и алгоритмов рисования. Подходит для создания простых иллюстраций, орнаментов и логотипов.

Как создать рисунок с помощью библиотеки Matplotlib?

Matplotlib обычно применяется для построения графиков, но её модуль patches позволяет рисовать произвольные формы. Решение подходит для встраивания фигур в научные отчёты или визуализации.

import matplotlib.pyplot as plt
import matplotlib.patches as patches

fig, ax = plt.subplots()
rectangle = patches.Rectangle((0.1, 0.1), 0.5, 0.3, edgecolor='blue', facecolor='lightgray')
ax.add_patch(rectangle)
circle = patches.Circle((0.7, 0.7), 0.2, color='red')
ax.add_patch(circle)
ax.set_xlim(0, 1)
ax.set_ylim(0, 1)
ax.set_aspect('equal')
plt.show()

Здесь создаётся прямоугольник и круг на координатной плоскости. add_patch добавляет фигуры на оси. Важно установить set_aspect('equal'), чтобы пропорции не искажались.

Типичная ошибка: фигуры не видны, потому что не заданы границы осей (set_xlim / set_ylim) или они установлены слишком узко. Решение: явно указать диапазон, перекрывающий координаты фигур.

Проблема: круг выглядит как эллипс. Исправляется установкой равного масштаба осей.

Случаи использования: добавление аннотаций, диаграмм Венна, кастомных легенд.

Как создать изображение с помощью Pillow (PIL)?

Библиотека Pillow предназначена для работы с растровой графикой. Позволяет рисовать линии, прямоугольники, эллипсы, текст и заливки на пустом холсте.

from PIL import Image, ImageDraw

img = Image.new('RGB', (400, 300), color='white')
draw = ImageDraw.Draw(img)
draw.rectangle([50, 50, 200, 150], outline='black', fill='yellow')
draw.ellipse([250, 80, 350, 180], outline='red', fill='blue')
img.show()

Сначала создаётся белое изображение 400x300. Затем объект ImageDraw рисует прямоугольник и эллипс. Координаты задаются кортежем (x1, y1, x2, y2).

Типичная ошибка: изображение не отображается, если не установлен модуль Pillow (pip install Pillow). Также может не работать img.show() в некоторых средах (Jupyter, удалённый сервер). Решение: сохранить файл через img.save('result.png').

Ошибка: цвета не совпадают с ожидаемыми при смешивании режимов (RGB, RGBA). Следует явно указывать 'RGB'.

Цель: генерация изображений для веба, простых графических элементов, создание мемов или превью.

Как рисовать интерактивно с помощью Tkinter Canvas?

Tkinter - стандартная библиотека GUI. Виджет Canvas позволяет рисовать линии, фигуры, текст и обрабатывать события мыши. Подходит для создания простых графических редакторов.

import tkinter as tk

root = tk.Tk()
canvas = tk.Canvas(root, width=500, height=400, bg='lightyellow')
canvas.pack()
canvas.create_rectangle(50, 50, 200, 150, fill='green', outline='black')
canvas.create_oval(250, 100, 350, 200, fill='orange')
root.mainloop()

Создаётся окно с холстом. Методы create_rectangle и create_oval работают аналогично Pillow, но возвращают идентификаторы, которые можно изменять.

Типичная ошибка: окно не отображается в Jupyter Notebook без специальных магических команд. Лучше запускать как отдельный скрипт.

Проблема: фигуры не перерисовываются при изменении свойств. Используйте canvas.itemconfig(id, fill='new_color') для обновления.

Случаи использования: интерактивные приложения, игровые прототипы, рисование мышью.

Расширенные примеры кода рисунков на Python

Фрактал «Снежинка Коха» на Turtle

Пример
import turtle

def koch_curve(t, length, depth):
    if depth == 0:
        t.forward(length)
    else:
        for angle in [60, -120, 60, 0]:
            koch_curve(t, length/3, depth-1)
            t.left(angle)

t = turtle.Turtle()
t.speed(0)
t.penup()
t.goto(-150, 100)
t.pendown()
for _ in range(3):
    koch_curve(t, 300, 3)
    t.right(120)
turtle.done()
Результат: на экране появится снежинка Коха с тремя лучами, каждый из которых состоит из 3 уровней рекурсии. Линии ломаные, создающие фрактальный узор.

График функции с заливкой под кривой

Пример
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
plt.fill_between(x, y, alpha=0.3, color='skyblue')
plt.plot(x, y, 'r-', linewidth=2)
plt.title('Синусоида с заливкой')
plt.grid(True)
plt.show()
Результат: график синуса от 0 до 2π с голубой полупрозрачной заливкой под кривой и красной линией.

Создание узора из повторяющихся элементов с Pillow

Пример
from PIL import Image, ImageDraw

img = Image.new('RGB', (500, 500), color='black')
draw = ImageDraw.Draw(img)
colors = [(255,0,0), (0,255,0), (0,0,255), (255,255,0)]
for i, color in enumerate(colors):
    x = 50 + i*120
    y = 200
    draw.regular_polygon((x, y, 50), n_sides=6, rotation=0, fill=color, outline='white')
img.show()
Результат: горизонтальный ряд из четырёх шестиугольников разных цветов (красный, зелёный, синий, жёлтый) с белым контуром на чёрном фоне.

Интерактивное рисование мышью в Tkinter

Пример
import tkinter as tk

def draw(event):
    x, y = event.x, event.y
    canvas.create_oval(x-2, y-2, x+2, y+2, fill='black')

root = tk.Tk()
canvas = tk.Canvas(root, width=600, height=400, bg='white')
canvas.pack()
canvas.bind('', draw)
root.mainloop()
Результат: при зажатой левой кнопке мыши на холсте остаются чёрные точки, создавая свободный рисунок. Размер точки 4x4 пикселя.

Построение полярной розы (спирограф) с turtle

Пример
import turtle
import math

t = turtle.Turtle()
t.speed(0)
turtle.bgcolor('black')
t.pencolor('cyan')
for i in range(360):
    t.forward(math.sin(math.radians(i*3))*100 + 50)
    t.left(59)
turtle.done()
Результат: сложный циклический узор, напоминающий цветок. Линия постепенно поворачивается, создавая многолепестковую симметричную фигуру.

Коды рисунков на Python - comments

En
Python коды рисунков (python)