파이썬에서 이미지 파일을 불러오고 다양한 작업을 수행하려면 Pillow(PIL) 라이브러리가 필요합니다. Pillow는 애플리케이션이 이미지를 가져와서 크기 조정, 회전, 필터 적용 등 여러 가지 연산을 처리할 수 있게 해주는 대표적인 이미지 처리 패키지입니다.
이 글에서는 Tkinter 창의 크기가 변할 때 배경 이미지도 함께 동적으로 조정되도록 만드는 방법을 살펴보겠습니다. 전체 구현 과정은 다음과 같습니다.
Tkinter 애플리케이션에서 이미지 파일을 엽니다.
Canvas 위젯을 생성하고 create_image(**options) 메서드를 사용해 캔버스 위에 이미지를 배치합니다.
불러온 이미지의 크기를 조정하는 함수를 정의합니다.
해당 함수를 부모(루트) 윈도우의 설정 이벤트에 바인딩하여, 창 크기가 변경될 때마다 자동으로 실행되도록 합니다.
예제 코드
# 필요한 라이브러리 임포트
from tkinter import *
from PIL import ImageTk, Image
# Tkinter 프레임 인스턴스 생성
win = Tk()
# Tkinter 프레임의 크기 설정
win.geometry("700x450")
# 이미지 파일 열기
bg = ImageTk.PhotoImage(file="tutorialspoint.png")
# 캔버스 생성
canvas = Canvas(win, width=700, height=3500)
canvas.pack(fill=BOTH, expand=True)
# 캔버스 안에 이미지 추가
canvas.create_image(0, 0, image=bg, anchor='nw')
# 창 크기에 맞춰 이미지를 조정하는 함수
def resize_image(e):
global image, resized, image2
# 크기를 조정할 이미지 열기
image = Image.open("tutorialspoint.png")
# 루트 윈도우의 너비와 높이에 맞춰 이미지 크기 조정
resized = image.resize((e.width, e.height), Image.ANTIALIAS)
image2 = ImageTk.PhotoImage(resized)
canvas.create_image(0, 0, image=image2, anchor='nw')
# 부모 윈도우 설정 이벤트에 함수 바인딩
win.bind("", resize_image)
win.mainloop() 실행 결과
위 코드를 실행하면 이미지가 포함된 창이 나타납니다. 창의 크기를 마우스로 늘리거나 줄이면 배경 이미지가 창 크기에 맞춰 실시간으로 함께 조절되는 것을 확인할 수 있습니다.

참고 사항
Pillow 10 버전부터는 Image.ANTIALIAS 상수가 제거되었습니다. 최신 버전의 Pillow를 사용한다면 리샘플링 옵션을 Image.LANCZOS 또는 Image.Resampling.LANCZOS로 변경해야 정상적으로 동작합니다.