Введение
Эта лабораторная работа проведет вас по процессу прямого использования бэкенда agg для создания изображений в Python Matplotlib. Бэкенд agg полезен для веб-разработчиков, которые хотят иметь полный контроль над своим кодом, не используя интерфейс pyplot для управления фигурами, закрытием фигур и т.д. В этой лабораторной работе мы покажем, как сохранить содержимое холста agg в файл и как извлечь его в массив numpy, который, в свою очередь, можно передать Pillow.
Советы по работе с ВМ
После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Создание фигуры и холста
Во - первых, нам нужно создать фигуру (Figure) и холст (Canvas). Фигура определяет размер, форму и содержимое графика, а холст - это место, где рисуется фигура.
from matplotlib.backends.backend_agg import FigureCanvasAgg
from matplotlib.figure import Figure
fig = Figure(figsize=(5, 4), dpi=100)
canvas = FigureCanvasAgg(fig)
Добавление данных для построения графика в фигуру
Теперь, когда у нас есть фигура (Figure) и холст (Canvas), мы можем добавить некоторые данные в график. В этом примере мы добавим простой линейный график.
ax = fig.add_subplot()
ax.plot([1, 2, 3])
Сохранение фигуры в файл
Для сохранения графика есть два варианта. Первый вариант - сохранить фигуру (Figure) в файл. В этом примере мы сохраним график в виде PNG - изображения.
fig.savefig("test.png")
Извлечение буфера рендеринга в массив numpy
Второй вариант сохранения графика - это извлечение буфера рендеринга в массив numpy. Это позволяет использовать Matplotlib внутри cgi - сценария без необходимости записывать фигуру на диск. В этом примере мы извлечем буфер рендеринга и преобразуем его в массив numpy.
import numpy as np
canvas.draw()
rgba = np.asarray(canvas.buffer_rgba())
Сохранение массива numpy в изображение Pillow
Теперь, когда у нас есть массив numpy, мы можем передать его в Pillow и сохранить в любом формате, поддерживаемом Pillow. В этом примере мы сохраним график в виде BMP - изображения.
from PIL import Image
im = Image.fromarray(rgba)
im.save("test.bmp")
Резюме
В этом практическом занятии мы показали, как использовать бэкенд agg в Python Matplotlib для создания изображений. Мы создали фигуру (Figure) и холст (Canvas), добавили данные в график и сохранили график в виде PNG - изображения. Мы также извлекли буфер рендеринга в массив numpy и сохранили график в виде BMP - изображения с использованием Pillow. Эти методы полезны для веб - разработчиков, которые хотят иметь полный контроль над своим кодом без использования интерфейса pyplot для управления фигурами, закрытием фигур и т.д.