Случайный цветСделаем изображения интереснее — подключим модуль random и напишем функцию, возвращающую случайный цвет.
import random
def random_color():
r = random.randint(0, 255)
g = random.randint(0, 255)
b = random.randint(0, 255)
return (r, g, b)
Эта функция каждый раз выдаёт новый кортеж из трёх случайных чисел.
Генерируем человечка (аватарку) случайного цветаТеперь соберём всё вместе и создадим программу, которая рисует человечка со случайными цветами.
План:
- Создадим изображение 400×400 пикселей с белым фоном.
- Напишем функции для рисования головы, туловища, рук и ног.
- Каждая часть будет иметь свой случайный цвет.
- Координаты подберем так, чтобы человечек помещался на картинке.
import random
from PIL import Image, ImageDraw
def random_color():
return (random.randint(0, 255),
random.randint(0, 255),
random.randint(0, 255))
def draw_head(draw, x, y, radius, color):
# Верхний левый угол ограничивающего квадрата: (x-radius, y-radius)
# Нижний правый: (x+radius, y+radius)
left = x - radius
top = y - radius
right = x + radius
bottom = y + radius
draw.ellipse([(left, top), (right, bottom)], fill=color)
def draw_body(draw, x, y, width, height, color):
# Туловище — прямоугольник, верхняя точка чуть ниже головы
left = x - width//2
top = y
right = x + width//2
bottom = y + height
draw.rectangle([(left, top), (right, bottom)], fill=color)
def draw_arms(draw, x, y, length, width, color):
# Левая рука
left_shoulder = (x - width//2, y)
left_hand = (x - length, y + length//2)
draw.line([left_shoulder, left_hand], fill=color, width=width)
# Правая рука
right_shoulder = (x + width//2, y)
right_hand = (x + length, y + length//2)
draw.line([right_shoulder, right_hand], fill=color, width=width)
def draw_legs(draw, x, y, length, width, color):
# Левая нога
left_hip = (x - width//2, y)
left_foot = (x - width//2, y + length)
draw.line([left_hip, left_foot], fill=color, width=width)
# Правая нога
right_hip = (x + width//2, y)
right_foot = (x + width//2, y + length)
draw.line([right_hip, right_foot], fill=color, width=width)
# Создаём изображение
image = Image.new("RGB", (400, 400), (255, 255, 255))
draw = ImageDraw.Draw(image)
# Координаты центра головы
head_x = 200
head_y = 120
head_radius = 50
head_color = random_color()
draw_head(draw, head_x, head_y, head_radius, head_color)
# Туловище
body_width = 60
body_height = 100
body_y = head_y + head_radius # сразу под головой
body_color = random_color()
draw_body(draw, head_x, body_y, body_width, body_height, body_color)
# Руки
arm_length = 80
arm_width = 12
arm_y = body_y + 30 # примерно на уровне плеч
arm_color = random_color()
draw_arms(draw, head_x, arm_y, arm_length, arm_width, arm_color)
# Ноги
leg_length = 80
leg_width = 12
leg_y = body_y + body_height # низ туловища
leg_color = random_color()
draw_legs(draw, head_x, leg_y, leg_length, leg_width, leg_color)
# Сохраняем и показываем
image.save("random_avatar.png")
image.show()
Пояснения к функциям:
- draw_head рисует круг с центром в (x, y) и заданным радиусом. Для этого вычисляем координаты ограничивающего прямоугольника.
- draw_body рисует прямоугольник, верхняя граница которого совпадает с нижней границей головы.
- draw_arms рисует две линии от плеч в стороны. Плечи располагаются на ширину туловища.
- draw_legs рисует две линии от таза вниз.
- Каждая часть тела имеет свой случайный цвет, поэтому при каждом запуске получается уникальный человечек.
Теперь вы умеете создавать изображения с помощью Python, управлять каждым пикселем, рисовать геометрические фигуры и генерировать случайные аватарки.