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
'Python' 카테고리의 다른 글
| Pillow에서 Custom Kernel Filter 사용 (0) | 2025.07.02 |
|---|---|
| Pillow 사용법 - Basic 04 - ImageFilter (2) | 2025.07.01 |
| Pillow 사용법 - Basic 03 - Image Enhance (0) | 2025.07.01 |
| Pillow 사용법 - Basic 01 (2) | 2025.06.30 |
| [torchvision] torchvision.utils.save_image and torchvision.io.encode_jpeg, torchvision.io.encode_png (0) | 2025.06.17 |