Friday, February 03, 2006
Python Image Library
想要用python來處理影像,PIL(Python Imaging Library),是蠻不錯的選擇。
PIL來自http://effbot.org/downloads是在Python社群中,專門處理圖片的Library,它有2種release版本,一為source,另一為binary,最新的版本分別如下:
如果下載source,安裝後在$Imaging-xx.yy/Docs的目錄中,可以看到豐富的說明文件,及範例程式,文件內容包含了:系統需求、如何去編譯、安裝...。
- 系統需求
- JPEG and/or PNG
- PNG and ZIP:zlib
- TrueType/OpenType:freetype.org
- 編譯及安裝
a. 先作出libImaging/ImConfig.h
[samuel@IBM Imaging-1.1.4]$ cd libImaging
./configure ===> Makefile
make ===> ImConfig.h
b. 安裝
[samuel@IBM Imaging-1.1.4]$sudo python setup.py install
c. 測試
[samuel@sl304 ~]$ python
Python 2.4 (#9, Jan 22 2005, 13:05:42)
[GCC 3.2.3 20030502 (Red Hat Linux 3.2.3-42)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import PIL
>>>
如果沒有錯誤訊息,表示安裝成功。- 範例
1. 簡單測試
>>> import Image
>>> im = Image.open("lena.ppm")
>>> print im.format, im.size, im.mode
PPM (512, 512) RGB
>>> im.show() #using 'xv', handy for debugging and testing
2. 開檔
import Image
im=Image.open('Conficius.gif')
im.crop((360,150,700,745)).save('Conficius.png')
3. Crop Images
box = (100, 100, 400, 400) #cropping
region = im.crop(box)
region = region.transpose(Image.ROTATE_180) #box processed and pasted back
im.paste(region, box)
4. Rolling an image
def roll(image, delta):
"Roll an image sideways"
xsize, ysize = image.size
delta = delta % xsize
if delta == 0: return image
part1 = image.crop((0, 0, delta, ysize))
part2 = image.crop((delta, 0, xsize, ysize))
image.paste(part2, (0, 0, xsize-delta, ysize))
image.paste(part1, (xsize-delta, 0, xsize, ysize))
return image
5. Geometrical Transforms
out = im.resize((128, 128))
out = im.rotate(45) # degrees counter-clockwise
out = im.transpose(Image.FLIP_LEFT_RIGHT)
out = im.transpose(Image.FLIP_TOP_BOTTOM)
out = im.transpose(Image.ROTATE_90)
out = im.transpose(Image.ROTATE_180)
out = im.transpose(Image.ROTATE_270)