Python은 이미지 처리를 위해 Pillow, Python Imaging Library(PIL), scikit-image, OpenCV 등 다양한 라이브러리를 제공합니다. 이 글에서는 그중 Pillow 라이브러리를 사용해 보겠습니다. Pillow는 이미지 조작을 위한 다양한 표준 기능을 제공하며, JPEG, PNG, GIF, TIFF, BMP 등 폭넓은 이미지 파일 형식을 지원하기 때문입니다.
Pillow는 기존 PIL(Python Imaging Library)을 기반으로 만들어졌으며, 상위 라이브러리인 PIL보다 더 많은 기능과 개선된 성능을 제공합니다.
Pillow 설치하기
Pillow는 pip를 통해 간단히 설치할 수 있습니다. 명령어 터미널에 다음 명령을 입력하세요.
$ pip install pillow
Pillow의 기본 사용법
먼저 Pillow 라이브러리로 이미지에 대해 몇 가지 기본적인 작업을 수행해 보겠습니다.
from PIL import Image image = Image.open(r"C:\Users\rajesh\Desktop\imagefolder\beach-parga.jpg") image.show() # 원본 파일의 파일 형식 # 출력: JPEG print(image.format) # 이미지가 사용하는 픽셀 포맷. 일반적으로 "1", "L", "RGB", "CMYK" 등의 값이 사용됩니다. # 출력: RGB print(image.mode) # 픽셀 단위의 이미지 크기. (너비, 높이) 형태의 2-튜플로 반환됩니다. # 출력: (2048, 1365) print(image.size) # 색상 팔레트 테이블(존재하는 경우) # 출력: None print(image.palette)
실행 결과
JPEG RGB (2048, 1365) None
크기를 기준으로 이미지 필터링하기
아래 프로그램은 특정 경로(기본값: 현재 작업 디렉터리)에 있는 모든 이미지의 크기를 축소합니다. 코드에서 max_height, max_width 또는 처리할 이미지 확장자를 자유롭게 변경할 수 있습니다.
전체 코드
import os
from PIL import Image
max_height = 900
max_width = 900
extensions = ['JPG']
path = os.path.abspath(".")
def adjusted_size(width, height):
if width > max_width or height > max_height:
if width > height:
return max_width, int(max_width * height / width)
else:
return int(max_height * width / height), max_height
else:
return width, height
if __name__ == "__main__":
for img in os.listdir(path):
if os.path.isfile(os.path.join(path, img)):
img_text, img_ext = os.path.splitext(img)
img_ext = img_ext[1:].upper()
if img_ext in extensions:
print(img)
image = Image.open(os.path.join(path, img))
width, height = image.size
image = image.resize(adjusted_size(width, height))
image.save(os.path.join(path, img))실행 결과
another_Bike.jpg clock.JPG myBike.jpg Top-bike-wallpaper.jpg
코드 동작 방식
위 스크립트의 핵심 로직은 adjusted_size() 함수에 있습니다. 이 함수는 이미지의 너비와 높이가 설정된 최대 크기(max_width, max_height)를 초과하는지 확인하고, 초과할 경우 원본의 가로세로 비율(aspect ratio)을 유지하면서 최대 크기에 맞게 조정된 값을 반환합니다. 이미지가 이미 최대 크기보다 작다면 원본 크기를 그대로 유지합니다.
메인 실행 부분에서는 os.listdir()로 현재 디렉터리의 모든 파일을 순회하며, 확장자가 extensions 목록에 포함된 이미지 파일만 골라 열고, 크기를 조정한 뒤 같은 이름으로 저장합니다.
스크립트를 실행하면 현재 작업 디렉터리(여기서는 Python 스크립트가 있는 폴더)에 있는 대상 이미지들이 모두 최대 900픽셀(너비/높이) 이내의 크기로 변환됩니다.