Matplotlib Agg 백엔드를 사용한 이미지 생성

Beginner

This tutorial is from open-source community. Access the source code

소개

이 랩에서는 Python Matplotlib 에서 agg 백엔드를 직접 사용하여 이미지를 생성하는 과정을 안내합니다. agg 백엔드는 pyplot 인터페이스를 사용하여 그림, 그림 닫기 등을 관리하지 않고 코드에 대한 완전한 제어를 원하는 웹 애플리케이션 개발자에게 유용합니다. 이 랩에서는 agg 캔버스의 내용을 파일로 저장하는 방법과 이를 numpy 배열로 추출하는 방법을 보여줍니다. 이 numpy 배열은 Pillow 로 전달될 수 있습니다.

VM 팁

VM 시작이 완료되면, 왼쪽 상단을 클릭하여 Notebook 탭으로 전환하여 실습을 위해 Jupyter Notebook에 접속하십시오.

때로는 Jupyter Notebook 이 로딩을 완료하는 데 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한 사항으로 인해 작업의 유효성 검사는 자동화될 수 없습니다.

학습 중에 문제가 발생하면 언제든지 Labby 에게 문의하십시오. 세션 후 피드백을 제공해주시면 문제를 신속하게 해결해 드리겠습니다.

Figure 및 Canvas 생성

먼저 Figure 와 Canvas 를 생성해야 합니다. Figure 는 플롯의 크기, 모양 및 내용을 정의하고, Canvas 는 Figure 가 그려지는 곳입니다.

from matplotlib.backends.backend_agg import FigureCanvasAgg
from matplotlib.figure import Figure

fig = Figure(figsize=(5, 4), dpi=100)
canvas = FigureCanvasAgg(fig)

Figure 에 플로팅 데이터 추가

이제 Figure 와 Canvas 가 있으므로 플롯에 데이터를 추가할 수 있습니다. 이 예제에서는 간단한 선 그래프를 추가합니다.

ax = fig.add_subplot()
ax.plot([1, 2, 3])

Figure 를 파일로 저장

플롯을 저장하는 두 가지 옵션이 있습니다. 첫 번째 옵션은 Figure 를 파일로 저장하는 것입니다. 이 예제에서는 플롯을 PNG 이미지로 저장합니다.

fig.savefig("test.png")

렌더러 버퍼를 numpy 배열로 추출

그래프를 저장하는 두 번째 옵션은 렌더러 버퍼를 numpy 배열로 추출하는 것입니다. 이렇게 하면 cgi 스크립트 내에서 Matplotlib 를 사용하여 그래프를 디스크에 쓸 필요가 없습니다. 이 예제에서는 렌더러 버퍼를 추출하여 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")

요약

이 랩에서는 Python Matplotlib 에서 agg 백엔드를 사용하여 이미지를 생성하는 방법을 보여드렸습니다. Figure 와 Canvas 를 생성하고, 플롯에 데이터를 추가한 다음, 플롯을 PNG 이미지로 저장했습니다. 또한 렌더러 버퍼를 numpy 배열로 추출하고 Pillow 를 사용하여 플롯을 BMP 이미지로 저장했습니다. 이러한 기술은 pyplot 인터페이스를 사용하여 figure, figure 닫기 등을 관리하지 않고 코드에 대한 완벽한 제어를 원하는 웹 애플리케이션 개발자에게 유용합니다.