이미지 일괄 리사이즈, WEBP 포맷 용량 압축, GIF 애니메이션 동영상 제작 등 업무와 실생활 생산성을 조력하는 미디어 처리 유틸리티 서비스를 제작합니다.
1. 미디어 처리 전문 용어 사전 (Glossary)
- Pillow (PIL): 파이썬에서 이미지 렌더링, 크롭, 리사이즈, 포맷 변환(PNG $ ightarrow$ WEBP), 필터링을 수행하는 대표 이미지 패키지입니다.
- FFmpeg: 동영상 및 오디오 파일의 자르기, 병합, 인코딩, 포맷 변환을 고속 수행하는 표준 멀티미디어 프레임워크입니다.
- HTML5 Canvas: 브라우저 단에서 자바스크립트로 픽셀을 직접 그리거나 이미지를 즉시 압축 편집할 수 있는 그래픽 요소입니다.
2. 파이썬 Pillow 이미지 일괄 압축/변환 예제 코드
from PIL import Image
import os
def batch_compress_images(input_folder, output_folder, max_width=800):
"""이미지를 최대 너비 800px로 비율 유지 리사이즈하고 WEBP 포맷으로 일괄 압축"""
os.makedirs(output_folder, exist_ok=True)
for filename in os.listdir(input_folder):
if filename.lower().endswith(('png', 'jpg', 'jpeg')):
src_path = os.path.join(input_folder, filename)
with Image.open(src_path) as img:
# 1. 가로 세로 비율 계산하여 리사이즈
w_percent = (max_width / float(img.size[0]))
h_size = int((float(img.size[1]) * float(w_percent)))
resized = img.resize((max_width, h_size), Image.Resampling.LANCZOS)
# 2. 용량이 작은 WEBP 포맷으로 저장
out_name = f"opt_{os.path.splitext(filename)[0]}.webp"
out_path = os.path.join(output_folder, out_name)
resized.save(out_path, "WEBP", quality=80)
print(f"압축 완료: {out_path}")
# batch_compress_images("raw_photos", "optimized_photos")
3. 자주 묻는 질문 (Q&A)
Q. 서버를 거치지 않고 브라우저 자바스크립트만으로 이미지 용량을 압축할 수 있나요?
A. 네! HTML5 <canvas> 태그에 사용자 선택 이미지를 그리고 canvas.toDataURL('image/jpeg', 0.7) 메소드를 호출하면 70% 압축된 JPEG 이미지 Blob 데이터를 즉시 추출할 수 있습니다.