
Pillow 라이브러리
- Python Imaging Library(PIL)의 업그레이드 버전.
- 이미지 CRUD 작업을 원활히 수행할 수 있게 보조해줌.
- CRUD 외에도 이미지와 관련된 여러 기능들을 제공함.
기능 정리
| 기능 | 설명 |
|---|
| 이미지 열기 및 저장 | JPEG, PNG, GIF, BMP 등 여러 포맷의 이미지 파일을 열고 저장할 수 있음. |
| 이미지 변환 | 이미지를 다른 포맷으로 변환하거나, 회전 & 자르기 등 편집 작업 가능. |
| 텍스트 추가 | 이미지에 텍스트를 추가할 수 있어 워터마크나 설명 추가에 용이. |
| 이미지 합성 | 이미지 병합, 콜라주 생성 등 이미지를 합성해 새 이미지를 만드는 작업 가능. |
| 색상 변환 | 흑백 변환, RGB 변환 등 색상과 관련된 다양한 변환 작업을 수행할 수 있음. |
| 이미지 필터링 | 블러 등 이미지 필터를 적용해 시각적 효과를 입힐 수 있음. |
Pillow 사용법
1. Pillow 설치
pip install django 로 django 를 설치함.
pip install pillow 로 Pillow 라이브러리를 설치함.
2. 이미지 파일 업로드 폼 생성
# articles/forms.py
from django import forms
class ImageUploadForm(forms.Form):
title = forms.CharField(max_length=100)
image = forms.ImageField()
3. 이미지 처리 뷰 함수 추가
- 이미지 저장 & 처리용
views.py 생성.
# articles/views.py
from .forms import ImageUploadForm
from django.shortcuts import render
from PIL import Image
def upload_image(request):
if request.method == "POST":
form = ImageUploadForm(request.POST, request.FILES)
if form.is_valid():
image = Image.open(request.FILES['image'])
image_path = 'path/to/save/image.jpg'
image.save(image_path)
image_url = '/media/path/to/image.jpg' # 실제 저장된 이미지 경로로 대체해야 함
return render(request, 'upload_success.html', {'image_url': image_url})
else:
form = ImageUploadForm()
return render(request, 'upload_image.html', {'form': form})
4. 템플릿 작성
{% extends "base.html" %}
{% block content %}
<h1>이미지 업로드</h1>
<form action="" method="POST" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">업로드</button>
</form>
{% endblock content %}
- 이미지 업로드 완료 후 메시지용 템플릿 생성.
{% extends "base.html" %}
{% block content %}
<h1>이미지 업로드 성공</h1>
<img src="{{ image_url }}" alt="업로드된 이미지">
<a href="{% url 'articles' %}">목록으로</a>
{% endblock content %}
etc. 추가 사용법
- 아래 정리된 스크립트들을 기준으로 구글링 해볼 것.
| 기능 | 스크립트 |
|---|
| n도 만큼 이미지 회전 | image.rotate(n) |
| 이미지 자르기 | image.crop((left, top, right, bottom)) |
| 이미지 크기 조절 | image.resize((width, height)) |
| 이미지 블러 | image.filter(ImageFilter.BLUR) |
| 이미지 샤프닝(이미지 선명화) | image.filter(ImageFilter.SHARPEN) |
| 엣지 디텍션(윤곽선 강조) | image.filter(ImageFilter.FIND_EDGES) |
| 텍스트 추가 | ImageDraw.Draw(image).text((x, y), "텍스트", fill="색상") |
| 흑백 변환 | image.convert("L") |
| 이미지 합성 | Image.alpha_composite(image1, image2) |
참고 자료
- Pillow 설치 및 이미지 불러오기 [링크]
- Pillow 공식 문서 [링크]