본문 바로가기

프로그래밍/python

Pillow - Python Imaging Library, PIL의 후계자

PIL과 Pillow

PIL 프로젝트는 언제부터 인가 조용히 정지하였습니다. PIL 공식홈페이지에 가보면 마지막 release가 2009년 11월 인 것을 확인 할 수 있습니다. 지금 이 글을 쓰는 시점이 2013년 5월이니 3년 반 동안 릴리즈가 없었다는게 됩니다. 하지만 아직도 많은 사람들이 PIL를 사용하고 있습니다. PIL이 그 만큼 잘 만들어 졌고, 굉장히 유용하게 사용할 수 있기 때문입니다. 하지만 PIL에는 가장 큰 문제로 지적되는 것이 있습니다. 바로 Python3 지원입니다. 2009년에 마지막 릴리즈를 하고 프로젝트가 정지되었기 때문에 python3에 대한 지원은 전무합니다. 비공식적으로 python3로 포팅된 PIL이 있기 하지만, 윈도우 버전밖에 지원하고 있지 않습니다. 저는 python3 를 주로 사용하고, 거의 모든 이미지 처리는 PIL를 사용하기 때문에 python3에서 사용할 수 있는 PIL를 타는 목마름으로 기다리고 있었습니다. 윈도우 환경에서는 위의 링크를 이용해서 어떻게든 사용할 수 있었지만, 우분투 환경에서는 전혀 사용할 수 가 없었습니다. PIL를 사용해서 할 수 있는 수 많은 일들이 있는데, 그 기능들을 사용하지 못하니 답답하기만 했습니다.

그러다가 Pillow라는 라이브러리가 나타났습니다. 프로젝트가 시작된건 이 글을 쓰기로 부터 약 2년 전이지만, 주목을 받기 시작한 것은 6개월도 안됩니다. 하지만 python3를 지원한다는 큰 강점이 있었고, PIL과 비교해 봤을때 API가 거의 같아서 기존에 PIL 을 사용하던 사람들도 쉽게 사용할 수 있어서 우분투 13.04 버전이 나올때 기본 저장소에 추가되었습니다. 덕분에 우분투 13.04 버전을 사용하고 계신다면 다음 명령을 입력하시면 쉽게 Pillow를 설치할 수 있습니다.

$ sudo apt-get install python3-imaging


Pillow 설치

PIL는 몇가지 바이너리 라이브러리에 의존성이 있기 때문에 바이너리 파일들도 같이 받아야 합니다. 현재 Pillow는 윈도우 환경에 대해서만 바이너리 파일들을 egg패키지로 배포하고 있습니다. 우분투 환경에서는 위와 같이 apt-get 으로 설치하면 의존성 바이너리 파일들도 쉽게 받을 수 있습니다. Max OS나 리눅스 환경에서 pip를 통해 설치하기 위해서는 몇가지 바이너리 파일들을 따로 받아야 합니다. 

Mac OS 에서 pip로 설치 (Homebrew가 설치되어 있어야 합니다.)

$ brew install libtiff libjpeg webp littlecms

$ pip install Pillow

Linux 에서 pip로 설치 (우분투 13.04 이상에서는 그냥 python3-imaging으로 받는게 편합니다.

$ sudo apt-get install libtiff4-dev libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms1-dev libwebp-dev

$ pip install Pillow


Pillow의 특징

Pillow는 PIL과 비슷하다

Pillow는 기본적으로 PIL과 굉장히 비슷하기 때문에 Pillow를 배울려면 PIL 튜토리얼이나 문서를 보고 공부하시면 됩니다. Pillow는 자신을 Pillow is the "friendly" PIL fork by Alex Clark and Contributors. 라고 소개하고 있습니다. 그만큼 PIL의 API를 그대로 사용할 수 있도록 노력한 것 같습니다.

Pilow의 API는 PIL과 거의 비슷하지만 몇 가지 다른점이 있습니다. 공식 문서에서 설명하고 있는 대로, PIL의 Image 모듈은 글로벌 네임스페이스에 있었지만 Pillow에서는 PIL 네임스페이스로 옮겨졌습니다. 코드로 보자면

import Image

from PIL import Image

로 바꾸면 됩니다. 전역 네임스페이스를 쓰면 네임스페이스가 더러워 지기 쉬워서 이렇게 바꾼것 같습니다. 이런 변화는 비단 Pillow 뿐만 아니라 다른 unofficial PIL에서도 나타나던 변화였습니다. 

Pillow은 활발히 개발중이다

Pillow프로젝트는 Github Issue Tracker를 사용해서 버그들을 계속 찾아내고 있고, Travis-CI를 이용하여 지속적으로 테스팅을 하고 있습니다. 최대한 빨리 새로운 버전을 빌드하여 지속적으로 pip로 릴리즈 하고 있습니다. 그래서 많은 버그들을 빠르게 고쳐질 수 있고, 지속적인 업데이트로 사용자는 계속해서 최신버전을 사용할 수 있도록 하고 있습니다. 덕분에 Pillow는 PIL보다 안정적인 Imaging Library가 되어가고 있습니다.

Pillow Travis-CIPillow Travis-CI 화면

Sphinx 문서

기존의 PIL의 문서pythondoc를 이용하여 작성되었습니다. pythondoc는 2006년 이후로 릴리즈 되지 않고 있는 굉장히 오래된 문서화 도구입니다. Pillow팀은 오래된 문서화 툴을 버리고 새로운 문서를 작성하기 시작했습니다. 기존의 문서를 pandoc 을 이용하여 모두 reStructedText로 전환했고, 이렇게 전환된 텍스트를 Sphinx를 이용하여 문서화하였고, readthedocs.org에 호스팅 하였습니다. 아직 기존의 PIL문서 와 비교하면 예제도 없고, 설명도 빈약해서 오히려 더 완성도가 떨어지지만 앞으로 문서도 더 발전할 것으로 생각됩니다. 그리고 새롭게 써진 문서 에서는 해상 함수의 소스코드를 바로 확인할 수 있는 장점이 있기 때문에 예제나 설명이 부족하더라도 소스코드를 보고 배워갈 수 있다는 장점이 있습니다.


마치면서

그동안 PIL를 애용해 왔었지만 python3를 지원하지 않았기 때문에 굉장히 불편했는데, 이러한 갈증을 Pillow가 확 해소시키는 느낌이었습니다. 현재 커밋들만 봐도 굉장히 활발한 것을 확인할 수 있습니다. 그만큼 앞으로 발전할 가능성이 크다고 생각합니다. 물론 잘 나가다가 갑자기 제작자가 지쳤는지 사라져가는 프로젝트들도 있긴 하지만 아직까진 Pillow는 빠르게 발전해 나가고 있는것 같습니다.