Как программировать генерацию картинок на языке Python
Базовый способ: библиотека Pillow
Наиболее универсальное решение для создания и редактирования растровых изображений в Python - библиотека Pillow (форк PIL). Она поддерживает множество форматов, позволяет рисовать примитивы, работать с текстом, применять фильтры.
from PIL import Image, ImageDraw, ImageFont
# Создаем новое изображение 400x300, белый фон
img = Image.new('RGB', (400, 300), color='white')
draw = ImageDraw.Draw(img)
# Рисуем красный прямоугольник
draw.rectangle([50, 50, 150, 150], fill='red', outline='black')
# Добавляем текст (шрифт по умолчанию)
font = ImageFont.load_default()
draw.text((160, 60), 'Привет, мир!', fill='blue', font=font)
# Сохраняем в файл
img.save('example_pillow.png')сделать картинки python (создание изображений в python)
После выполнения в текущей папке появится файл example_pillow.png.
Типичные ошибки:
- Ошибка импорта
ImportError: No module named PIL- требуется установить Pillow:pip install Pillow - Не сохраняется прозрачность: при создании изображения с альфа-каналом используйте режим
'RGBA' - Текст отображается квадратами (некорректная кодировка) - укажите шрифт, поддерживающий кириллицу
Данный подход подходит для: генерации простых иконок, водяных знаков, автоматической обработки изображений, создания коллажей.
Как построить графики и сохранить их как изображение?
Использование библиотеки matplotlib для визуализации данных и сохранения результата в файл.
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y, label='sin(x)')
plt.title('График синуса')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.savefig('sine_plot.png', dpi=150)
plt.close()картинки python код (код для создания картинок на python)
После этого появляется файл sine_plot.png с графиком.
Частые затруднения:
- Изображение получается пустым - забыли вызвать
plt.close()илиplt.show()блокирует выполнение - Не отображаются русские буквы - нужно подключить шрифт, поддерживающий кириллицу, например:
plt.rcParams['font.family'] = 'DejaVu Sans'
Случаи применения: создание отчетов с графиками, сохранение диаграмм для веба.
Каким образом создать изображение с помощью OpenCV?
OpenCV - библиотека компьютерного зрения, также позволяет создавать и рисовать на изображениях.
import cv2
import numpy as np
# Создаем черное полотно 512x512
img = np.zeros((512, 512, 3), dtype=np.uint8)
# Рисуем зеленый круг
cv2.circle(img, (256, 256), 100, (0, 255, 0), 3)
# Рисуем синюю линию
cv2.line(img, (0, 0), (511, 511), (255, 0, 0), 5)
cv2.imwrite('opencv_sample.png', img)Python создание изображения (создание изображения в python)
Результат - файл opencv_sample.png с нарисованными фигурами.
Возможные проблемы:
- Цвета в OpenCV задаются в BGR, а не RGB
- При использовании
cv2.imshow()необходимо вызватьcv2.waitKey(), иначе окно может не открыться
OpenCV удобен для интеграции с алгоритмами распознавания объектов, обработки видео.
Как создать векторное изображение с помощью turtle?
Модуль turtle позволяет рисовать с помощью черепашьей графики, результат можно сохранить через canvas.postscript.
import turtle
# Настройка экрана
screen = turtle.Screen()
screen.setup(400, 400)
screen.bgcolor('white')
t = turtle.Turtle()
t.speed(1)
t.color('red')
t.forward(100)
t.left(90)
t.forward(100)
t.left(90)
t.forward(100)
t.left(90)
t.forward(100)
# Сохранение в PostScript (можно конвертировать в PNG)
canvas = screen.getcanvas()
canvas.postscript(file='turtle_square.eps')
screen.exitonclick()
Будет создан файл turtle_square.eps, который можно преобразовать в PNG с помощью внешних инструментов.
Замечания:
- turtle - инструмент для обучения, не предназначен для высокопроизводительной работы
- Сохранение только в EPS, для других форматов нужна конвертация
Используется в учебных целях, для генерации простых векторных рисунков.
Как создать анимированный GIF из нескольких изображений?
Библиотека imageio объединяет несколько кадров в анимацию.
import imageio
import numpy as np
frames = []
for i in range(10):
# Создаем кадр - однотонный цвет меняется
img = np.full((100, 100, 3), i * 25, dtype=np.uint8)
frames.append(img)
imageio.mimsave('animation.gif', frames, duration=0.5)
В результате получается анимированный GIF с 10 кадрами.
Сложности:
- Кадры должны быть одинакового размера
- Для режима GIF с прозрачностью требуется передавать маску альфа-канала
Подходит для создания простых анимаций, смены слайдов, визуализации изменений во времени.
Как создать векторное изображение с помощью pycairo?
Библиотека Cairo - профессиональная 2D-графика, поддержка PDF, SVG, PNG.
import cairo
# Создаем поверхность и контекст
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 200, 200)
ctx = cairo.Context(surface)
# Рисуем синий прямоугольник
ctx.set_source_rgb(0, 0, 1)
ctx.rectangle(50, 50, 100, 100)
ctx.fill()
# Добавляем текст
ctx.set_source_rgb(1, 1, 1)
ctx.select_font_face('Sans', cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_NORMAL)
ctx.set_font_size(20)
ctx.move_to(60, 110)
ctx.show_text('Hi')
surface.write_to_png('cairo_sample.png')
Появится файл cairo_sample.png с качественной векторной графикой.
Потенциальные трудности:
- Непонятное API с контекстом и поверхностями - нужно привыкать
- Русский текст может не отображаться без выбора шрифта с кириллицей
Используется в профессиональных приложениях, требующих высокого качества векторного рендеринга (графики для печати, диаграммы).
Продвинутые примеры генерации изображений
Пример 1. Градиент на Pillow
from PIL import Image
import numpy as np
# Создаем массив градиента
width, height = 400, 200
array = np.zeros((height, width, 3), dtype=np.uint8)
for x in range(width):
val = int(255 * x / width)
array[:, x] = [val, val, 255 - val] # от синего к оранжевому
img = Image.fromarray(array)
img.save('gradient.png')
Результат: изображение с плавным переходом цвета слева направо.
Пример 2. Наложение водяного знака
from PIL import Image, ImageDraw, ImageFont
# Открываем основное изображение
base = Image.open('source.jpg').convert('RGBA')
# Создаем слой для текста
text_layer = Image.new('RGBA', base.size, (255, 255, 255, 0))
draw = ImageDraw.Draw(text_layer)
# Шрифт (укажите путь к .ttf файлу)
font = ImageFont.truetype('arial.ttf', 36)
draw.text((10, 10), 'Watermark', fill=(255, 255, 255, 128), font=font)
# Накладываем слой
watermarked = Image.alpha_composite(base, text_layer)
watermarked.save('watermarked.png')
Исходное изображение с полупрозрачным текстом в левом верхнем углу.
Пример 3. Применение фильтров (размытие)
from PIL import Image, ImageFilter
img = Image.open('photo.jpg')
blurred = img.filter(ImageFilter.GaussianBlur(radius=5))
blurred.save('blurred_photo.jpg')
Изображение с эффектом размытия.
Пример 4. Создание QR-кода
import qrcode
qr = qrcode.QRCode(version=1, box_size=10, border=5)
qr.add_data('https://example.com')
qr.make(fit=True)
img = qr.make_image(fill_color='black', back_color='white')
img.save('qrcode.png')
Файл qrcode.png с QR-кодом, который ведет на сайт.
Пример 5. Анимированный GIF с изменяющимися фигурами
import imageio
import numpy as np
def create_frame(phase):
# Создаем 200x200 черное изображение с белым кругом
img = np.zeros((200, 200, 3), dtype=np.uint8)
center = (100, 100)
radius = 50 + int(30 * np.sin(phase))
# Рисуем круг (вручную через координаты для простоты)
for y in range(200):
for x in range(200):
if (x - center[0])**2 + (y - center[1])**2 <= radius**2:
img[y, x] = [255, 255, 255]
return img
frames = []
for i in range(20):
phase = 2 * np.pi * i / 20
frames.append(create_frame(phase))
imageio.mimsave('pulsating_circle.gif', frames, duration=0.1)
Анимация пульсирующего круга в формате GIF.