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的目錄中,可以看到豐富的說明文件,及範例程式,文件內容包含了:系統需求、如何去編譯、安裝...。

  1. 系統需求
  1. 編譯及安裝
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. 範例
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)

Comments: Post a Comment



<< Home

This page is powered by Blogger. Isn't yours?