Ch.1 Python 라이브러리 15선

Pillow — 이미지 편집 자동화

lightbulb

핵심 개념

Pillow

Python으로 이미지를 편집·처리하는 라이브러리


article

핵심 내용

Pillow는 코드로 돌리는 포토샵입니다

한 줄 요약: 이미지를 열어서 크기 변경, 자르기, 필터, 글자 넣기, 워터마크까지 코드로 처리하는 이미지 편집 라이브러리. 실생활 비유: 포토샵에서 이미지 열고, 리사이즈하고, 텍스트 넣고, 저장하는 작업 있잖아요? Pillow는 그걸 코드 몇 줄로 끝내는 '자동화된 포토샵 기사'입니다. 사진 100장도 한 번에 처리해요.

사진 100장 편집을 클릭 한 번으로

수동 (포토샵): 파일 열기 → 이미지 크기 조절 → 워터마크 넣기 → 다른 이름으로 저장. 사진 100장이면 100번 반복. 손목이 아파요.

코드 (Pillow): for img in images:

img.resize((1200, 800))

img.paste(watermark)

img.save(output)

100장도 10초.

설치 한 줄, 이미지 열기 두 줄

pip install Pillow
from PIL import Image

img = Image.open('photo.jpg')
print(f'크기: {img.size}')
print(f'포맷: {img.format}')
img.show()  # 기본 뷰어로 열기

실행 결과: 이미지의 가로x세로 크기와 파일 포맷(JPEG, PNG 등)이 출력되고, 기본 이미지 뷰어에서 사진이 열립니다. 패키지 이름은 Pillow지만 import할 때는 PIL이에요.

원하는 편집 작업을 구체적으로 말하세요

좋은 프롬프트 예시 "Pillow로 현재 폴더의 모든 jpg 파일을 1200px로 리사이즈하고 워터마크를 넣어서 output/ 폴더에 저장해줘"

프롬프트 변형 • "이미지 하단에 흰색 글씨로 날짜를 넣어줘" • "PNG를 JPG로 일괄 변환하고 용량을 80%로 압축해줘" • "정사각형으로 자르고 인스타그램 업로드 사이즈로 맞춰줘"

from PIL import Image, ImageDraw, ImageFont
import os

os.makedirs('output', exist_ok=True)

for filename in os.listdir('.'):
    if filename.lower().endswith('.jpg'):
        img = Image.open(filename)

        # 가로 1200px로 리사이즈 (비율 유지)
        ratio = 1200 / img.width
        new_size = (1200, int(img.height * ratio))
        img = img.resize(new_size, Image.LANCZOS)

        # 워터마크 텍스트 추가
        draw = ImageDraw.Draw(img)
        draw.text((10, 10), 'My Shop', fill='white')

        img.save(f'output/{filename}')
        print(f'{filename} 처리 완료')

쇼핑몰 이미지 일괄 리사이즈

from PIL import Image, ImageDraw, ImageFont
import os
from datetime import datetime

# 설정
INPUT_DIR = 'photos'
OUTPUT_DIR = 'output'
TARGET_WIDTH = 1200
WATERMARK = 'MyShop.kr'

os.makedirs(OUTPUT_DIR, exist_ok=True)

files = [f for f in os.listdir(INPUT_DIR)
         if f.lower().endswith(('.jpg', '.jpeg', '.png'))]

print(f'=== 이미지 일괄 처리 ({len(files)}장) ===\n')

for i, filename in enumerate(files, 1):
    img = Image.open(os.path.join(INPUT_DIR, filename))
    original_size = img.size

    # 비율 유지 리사이즈
    ratio = TARGET_WIDTH / img.width
    new_size = (TARGET_WIDTH, int(img.height * ratio))
    img = img.resize(new_size, Image.LANCZOS)

    # 우하단 워터마크
    draw = ImageDraw.Draw(img)
    text_bbox = draw.textbbox((0, 0), WATERMARK)
    text_w = text_bbox[2] - text_bbox[0]
    text_h = text_bbox[3] - text_bbox[1]
    x = img.width - text_w - 20
    y = img.height - text_h - 20
    draw.text((x, y), WATERMARK, fill=(255, 255, 255, 180))

    # 저장 (JPG 품질 85%)
    out_path = os.path.join(OUTPUT_DIR, filename)
    img.save(out_path, quality=85)
    print(f'  [{i}/{len(files)}] {filename}: {original_size} → {new_size}')

print(f'\n완료! {OUTPUT_DIR}/ 폴더를 확인하세요.')

실행 방법: photos/ 폴더에 상품 사진을 넣고 `python 이미지처리.py`로 실행. 모든 이미지가 1200px로 리사이즈되고 워터마크가 추가되어 output/ 폴더에 저장됩니다. 쇼핑몰 상품 등록 전 필수 작업을 한 번에 끝낼 수 있어요.

Pillow에서 이미지 크기를 변경하는 메서드는?

key

핵심 용어

🖼️

Pillow

Python으로 이미지를 편집·처리하는 라이브러리

🛒 쇼핑몰 운영

상품 사진 수백 장을 동일한 크기로 리사이즈하고 로고 삽입

📸 사진 정리

여행 사진 일괄 압축, 날짜별 폴더 분류, 썸네일 생성

🎨 콘텐츠 제작

SNS용 이미지에 텍스트 오버레이, 필터 효과 자동 적용

check_circle

핵심 정리

  • 1Pillow는 이미지를 코드로 편집하는 핵심 라이브러리 (import PIL)
  • 2Image.open()으로 열고, resize()로 크기 변경, ImageDraw로 텍스트/도형 추가
  • 3사진 100장 수작업 2시간 → 코드 10초로 일괄 처리 자동화
  • 4AI 프롬프트에 '파일 경로 + 원하는 편집 + Pillow'를 명시하면 완성 코드 생성

퀴즈와 인터랙션으로 더 깊이 학습하세요

play_circle인터랙티브 레슨 시작