1、簡介python
PIL:Python Imaging Library,已是Python平臺事實上的圖像處理標準庫了。PIL功能很是強大,但API卻很是簡單易用git
因爲PIL僅支持到Python 2.7,加上年久失修,因而一羣志願者在PIL的基礎上建立了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了許多新特性,所以,咱們能夠直接安裝使用Pillowgithub
2、安裝函數
使用 pip 命令安裝Pillow:spa
$ pip install Pillowrest
3、 基本概念code
一、通道視頻
每張圖片都是由一個或者多個數據通道構成,PIL容許在單張圖片中合成相同維數和深度的多個通道。對象
以RGB圖像爲例,每張圖片都是由三個數據通道構成,分別爲R、G和B通道。而對於灰度圖像,則只有一個通道。blog
對於一張圖片的通道數量和名稱,能夠經過方法getbands()來獲取。方法getbands()是Image模塊的方法,它會返回一個字符串元組(tuple)。該元組將包括每個通道的名稱
方法getbands()的使用以下:
1 from PIL import Image 2 3 im = Image.open(image_path) # image_path爲圖像的絕對路徑
4 # 返回圖像的通道 5 print(im.getbands(), type(im.getbands()))
輸出:('R', 'G', 'B', 'A') <class 'tuple'>
二、模式
圖像的模式定義了圖像的類型和像素的位寬,當前支持以下模式:
1:1位像素,表示黑和白,可是存儲的時候每一個像素存儲爲8bit。
L:8位像素,表示黑和白。
P:8位像素,使用調色板映射到其餘模式。
RGB:3x8位像素,爲真彩色。
RGBA:4x8位像素,有透明通道的真彩色。
CMYK:4x8位像素,顏色分離。
YCbCr:3x8位像素,彩色視頻格式。
I:32位整型像素。
F:32位浮點型像素。
PIL也支持一些特殊的模式,包括RGBX(有padding的真彩色)和RGBa(有自左乘alpha的真彩色)。
能夠經過Image對象的mode屬性讀取圖像的模式。其返回值是包括上述模式的字符串
屬性mode的使用以下:
1 from PIL import Image 2 3 im = Image.open(image_path) 4 print(im.mode, type(im.mode))
輸出:RGBA <class 'str'>
三、尺寸
經過Image對象的size屬性能夠獲取圖片的尺寸。圖像大小,以像素爲單位。大小是一個2元組(寬度、高度)(width, height)
屬性size的使用以下:
1 from PIL import Image 2 3 im = Image.open(image_path) 4 # 返回圖像尺寸 5 print(im.size, type(im.size))
輸出:(750, 1334) <class 'tuple'>
四、座標系統
PIL使用笛卡爾像素座標系統,座標(0,0)位於左上角。注意:座標值表示像素的角;位於座標(0,0)處的像素的中心實際上位於(0.5,0.5)。
座標常常用於二元組(x,y)。長方形則表示爲四元組,前面是左上角座標。例如,一個覆蓋800x600的像素圖像的長方形表示爲(0,0,800,600)。
五、調色板
調色板模式 ("P")使用一個顏色調色板爲每一個像素定義具體的顏色值
六、信息
使用Image對象的info屬性能夠爲一張圖片添加一些輔助信息。這個是字典對象。加載和保存圖像文件時,多少信息須要處理取決於文件格式。
存儲與圖像相關的數據的字典。文件處理程序使用此字典傳遞從文件中讀取的各類非圖像信息
屬性info的使用以下:
1 from PIL import Image 2 3 im = Image.open(image_path) 4 # 返回圖像信息 5 print(im.info, type(im.info))
輸出:{} <class 'dict'>
七、濾波器
對於將多個輸入像素映射爲一個輸出像素的幾何操做,PIL提供了4個不一樣的採樣濾波器:
NEAREST:最近濾波。從輸入圖像中選取最近的像素做爲輸出像素。它忽略了全部其餘的像素。 BILINEAR:雙線性濾波。在輸入圖像的2x2矩陣上進行線性插值。注意:PIL的當前版本,作下采樣時該濾波器使用了固定輸入模板。 BICUBIC:雙立方濾波。在輸入圖像的4x4矩陣上進行立方插值。注意:PIL的當前版本,作下采樣時該濾波器使用了固定輸入模板。 ANTIALIAS:平滑濾波。這是PIL 1.1.3版本中新的濾波器。對全部能夠影響輸出像素的輸入像素進行高質量的重採樣濾波,以計算輸出像素值。在當前的PIL版本中,這個濾波器只用於改變尺寸和縮略圖方法。 注意:在當前的PIL版本中,ANTIALIAS濾波器是下采樣(例如,將一個大的圖像轉換爲小圖)時惟一正確的濾波器。BILIEAR和BICUBIC濾波器使用固定的輸入模板,用於固定比例的幾何變換和上採樣是最好的。
Image模塊中的方法resize()和thumbnail()用到了濾波器
方法resize()的使用以下:
語法:Image.resize(size, resample=0)
參數:size-2元組:(寬度、高度),以像素爲單位
resample-可選的重採樣過濾器,若是省略,或者圖像的模式爲「1」或「P」,則將其設置爲nearest
1 from PIL import Image 2 3 course_im = Image.open(course_path) 4 print(course_im.size, type(course_im.size)) 5 course_resize = course_im.resize((538, 336)) # 返回此圖像的大小調整後的副本 6 print(course_resize.size)
輸出:
(750, 400)
(538, 336)
若是要使用其餘濾波器能夠經過下面的方法來實現:
from PIL import Image course_im = Image.open(course_path) print(course_im.size, type(course_im.size)) course_resize = course_im.resize((538, 336), Image.ANTIALIAS) print(course_resize.size)
方法thumbnail()的使用以下:
語法:Image.thumbnail(size, resample=1)
參數:size-2元組:(寬度、高度),以像素爲單位
resample-可選的重採樣過濾器,若是省略,則默認爲PIL.Image.BICUBIC
把這個圖像作成縮略圖
請注意,PIL當前版本中的BILINEAR和BICUBIC並不適合生成縮略圖。你應該用ANTIALIAS,除非速度比質量重要得多。
from PIL import Image im = Image.open(avtar_path) avtar_im.thumbnail((98, 98)) # 返回None
4、Image模塊
Image模塊是PIL中最重要的模塊,它有一個類叫作image,與模塊名稱相同。Image類有不少函數、方法及屬性,接下來將依次對image類的屬性、函數和方法進行介紹。
類函數
實例屬性
實例方法
一、paste(im, box=None, mask=None) 將另外一個圖像粘貼到此圖像中
參數:
box:要麼是一個2元組給出左上角,一個4元組定義左、上、右、下像素座標,或None(好比(0,0))
mask:可選的掩碼圖像
注意:若是模式不匹配,則將粘貼的圖像轉換爲此圖像的模式