본문 바로가기
목차
Python

Pillow 사용법 - Basic 02 - copy, ImageDraw

by ds31x 2025. 7. 1.
728x90
반응형

1. copy() 메서드

PIL.Image.Image 객체에서 제공하는 메서드.
현재 이미지의 완전한 복사본을 생성하여 새로운 PIL.Image.Image 객체를 반환.

PIL.Image.Image.copy() -> PIL.Image.Image
  • 매개변수 없음
  • 이미지 데이터와 메타데이터를 모두 포함한 깊은 복사(deep copy) 수행
  • 원본 이미지와 독립적인 새로운 객체 생성 (한쪽을 수정해도 다른 쪽에 영향 없음)
  • paste(), thumbnail() 등 원본을 직접 수정하는 메서드 사용 전에 원본 보존 목적으로 자주 사용

이미지 편집 작업에서 되돌리기(undo) 기능 구현이나 여러 버전 생성 시 필수적


2. PIL.ImageDraw.Draw 클래스

그리기 작업을 수행하기 위한 클래스로서,
생성자에서 작업의 대상이 되는 Image 객체를 인자로 넘겨 받음.

https://gist.github.com/dsaint31x/ddc7bb24268ce9d838c4ebc21ac89614

 

pillow_basic02_ImageDraw.ipynb

pillow_basic02_ImageDraw.ipynb. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

 

다음은 간단한 사용예임. 

from PIL import Image, ImageDraw
img = Image.new('RGB', (200, 100), 'white')
draw = ImageDraw.Draw(img)
draw.rectangle([10, 10, 190, 90], outline='black', fill='blue')

 

지원하는 메서드는 다음과 같음.


2-1. line() 메서드

PIL.ImageDraw.ImageDraw 객체에서 제공하는 메서드.

두 점 사이에 직선을 그리며, 반환값은 None (이미지를 직접 수정).

PIL.ImageDraw.ImageDraw.line(
    xy, 
    fill=None, 
    width=0,
) -> None
  • xy: 시작점과 끝점 좌표 [(x1, y1), (x2, y2)] 또는 [x1, y1, x2, y2]
  • fill: 선의 색상 (색상명, RGB 튜플, 16진수 등)
  • width: 선의 두께 (기본값 0은 1픽셀, 1 이상부터 굵은 선)

여러 점을 연결한 선분도 그릴 수 있음 [(x1,y1), (x2,y2), (x3,y3), ...]

그래프, 도표, 기하학적 도형의 윤곽선 그리기에 사용


2-2. rectangle() 메서드

PIL.ImageDraw.ImageDraw 객체에서 제공하는 메서드.

사각형을 그리며, 반환값은 None (이미지를 직접 수정).

PIL.ImageDraw.ImageDraw.rectangle(
    xy, 
    fill=None, 
    outline=None, 
    width=1,
) -> None
  • xy: 사각형 영역을 지정하는 [x1, y1, x2, y2] 또는 [(x1, y1), (x2, y2)]
    • (x1, y1)은 left top,
    • (x2, y2)는 right bottom
  • fill: 사각형 내부를 채울 색상 (None이면 투명)
  • outline: 사각형 테두리 색상 (None이면 테두리 없음)
  • width: 테두리 두께 (기본값 1)

2-3. ellipse() 메서드

PIL.ImageDraw.ImageDraw 객체에서 제공하는 메서드.

타원(원 포함)을 그리며, 반환값은 None (이미지를 직접 수정).

  • 정사각형 영역에 그리면 circle 이 되고,
  • 직사각형 영역에 그리면 타원이 됨
PIL.ImageDraw.ImageDraw.ellipse(
    xy, 
    fill=None, 
    outline=None, 
    width=1,
) -> None
  • xy: 타원이 들어갈 사각형 영역 [x1, y1, x2, y2] 또는 [(x1, y1), (x2, y2)]
    • (x1, y1)은 left top,
    • (x2, y2)는 right bottom
  • fill: 타원 내부를 채울 색상 (None이면 투명)
  • outline: 타원 테두리 색상 (None이면 테두리 없음)
  • width: 테두리 두께 (기본값 1)

2-4. text() 메서드

PIL.ImageDraw.ImageDraw 객체에서 제공하는 메서드.

이미지에 텍스트를 그리며, 반환값은 None (이미지를 직접 수정).

PIL.ImageDraw.ImageDraw.text(
    xy, 
    text, 
    fill=None, 
    font=None, 
    anchor=None,
) -> None
  • xy: 텍스트 시작 위치 (x, y) 좌표
  • text: 그릴 텍스트 문자열
  • fill: 텍스트 색상 (기본값은 검은색)
  • font: 폰트 객체
    • PIL.ImageFont 모듈에서 생성,
    • None이면 기본 폰트
  • anchor: 텍스트 정렬 방식
    • la: left-ascender (왼쪽 끝과 상단부, 기본값)
    • 'lt': left-top,
    • 'mm': middle-middle,
    • ra: right-ascender

2-5. polygon() 메서드

PIL.ImageDraw.ImageDraw 객체에서 제공하는 메서드.

 

다각형을 그리며, 반환값은 None (이미지를 직접 수정).
마지막 점과 첫 번째 점이 자동으로 연결되어 닫힌 도형 생성

  • 삼각형, 화살표, 별모양 등 복잡한 도형 그리기에 사용
  • 최소 3개 이상의 점이 필요함
PIL.ImageDraw.ImageDraw.polygon(
    xy, 
    fill=None, 
    outline=None, 
    width=1,
) -> None
  • xy: 다각형의 꼭짓점 좌표 리스트 [(x1,y1), (x2,y2), (x3,y3), ...]
  • fill: 다각형 내부를 채울 색상 (None이면 투명)
  • outline: 다각형 테두리 색상 (None이면 테두리 없음)
  • width: 테두리 두께 (기본값 1)

2-6. arc() 메서드

PIL.ImageDraw.ImageDraw 객체에서 제공하는 메서드.
타원의 일부분인 호(arc)를 그리며, 반환값은 None (이미지를 직접 수정).

PIL.ImageDraw.ImageDraw.arc(
    xy, 
    start, 
    end, 
    fill=None, 
    width=1,
) -> None
  • xy: 호가 들어갈 사각형 영역 [x1, y1, x2, y2] 또는 [(x1, y1), (x2, y2)]
  • start: 시작 각도 (도 단위, 0도는 3시 방향)
    • 각도는 CW으로 증가 (0도=오른쪽, 90도=아래쪽, 180도=왼쪽, 270도=위쪽)
  • end: 끝 각도 (도 단위)
  • fill: 호의 색상 (outline과 동일한 역할)
  • width: 호의 두께 (기본값 1)

같이보면 좋은 자료들

2025.06.30 - [Python] - Pillow 사용법 - Basic 01

 

Pillow 사용법 - Basic 01

Pillow 라이브러리의 기본적인 사용법을 다룬다. 2024.06.03 - [Python] - [Python] PIL, Pillow, OpenCV, and Scikit-image [Python] PIL, Pillow, OpenCV, and Scikit-imagePIL, Pillow, OpenCV, and Scikit-imagePython에서 이미지를 다룰 때

ds31x.tistory.com

2025.07.01 - [Python] - Pillow 사용법 - Basic 03 - Image Enhance

 

Pillow 사용법 - Basic 03 - Image Enhance

ImageEnhance 모듈을 통해 Image Enhancement 기능을 지원. 참고로, torchvision.transforms 의 image adjustment와 알고리즘이 유사함 api document: https://pillow.readthedocs.io/en/stable/reference/ImageEnhance.html 관련 gisthttps://gist.

ds31x.tistory.com


 

728x90