PIL基礎
PIL (Pillow)
Pillow 是 PIL的對Python3支持的另外一個分支,當然他對Python2也兼容,由於PIL安裝起來比較煩,而使用pip可以很輕松的安裝Pillow,所以我選擇Pillow使用,但是其核心還是PIL庫的。
Python的圖形處理庫如PIL一直很強大,但是要想使用好它必須對圖片有一定的知識儲備。 使用起來很簡單
from PIL import Image
引用Image包
im = Image.open('1.png')
打開圖片,得到一個im對象,我們接下來就可以對這個對象進行操作(前提有這個1.png圖片)
我們先看一下他的一些屬性
>>> print im.format, im.size, im.mode
PNG (83, 81) RGB
第一個我們輸出圖片的格式,圖片有很多種格式,常用的有jpg、png還有gif動圖啊,PIL支持很多種格式,我們可以使用PIL輕松的將格式轉換,im.save('1.jpg')
,當然你可以選擇格式假如你沒選好后綴名的話,im.size就是圖片大小,他返回的是一個元組第一個長度第二個是寬度,單位是像素。 現在就談談 這三個屬性對應的關系吧 首先我們使用一張像素圖來說吧
我們存貯圖片的時候是將整個圖像分成很多個相同的小方塊,每個小方塊我們稱為像素,當然一張圖片分的越小,像素越多,那么圖片就越接近真實圖片,上面的im.size
屬性就告訴我們,這張圖片分成了,長為83px,寬為81px的圖片,那么一共有83*81=6723個像素點,每個像素點里面存什么呢,這就是im.mode
屬性告訴我們的,貼一下屬性有什么吧
- 1 (1-bit pixels, black and white, stored with one pixel per byte)
- L (8-bit pixels, black and white)
- P (8-bit pixels, mapped to any other mode using a color palette)
- RGB (3x8-bit pixels, true color)
- RGBA (4x8-bit pixels, true color with transparency mask)
- CMYK (4x8-bit pixels, color separation)
- YCbCr (3x8-bit pixels, color video format)
- I (32-bit signed integer pixels)
- F (32-bit floating point pixels)
像素存貯就是涉及到顏色的存貯,在早期的黑白游戲機,只有黑和白兩種,那么每個像素點就只有1位顏色來存貯,1位只能存貯兩種顏色,八位色就能存256種顏色,像八位我們能用256個油漆桶/256色調色板來形容,像上面我們使用的RGB是由三種三原色紅綠藍混合而成,我們知道大自然所有的顏色都可以用紅綠藍三種顏色調配出來,所以RGB又被稱為真彩(true color),每種顏色我們都分成256種,所以我們一共有256256256=16777216種顏色可以調配,像素的其他模式我們不介紹太多,有興趣的可以自己鑽研。 那么我們知道每個像素占多少字節,又知道共有多少個像素,那我們是不是就可以直接計算出來圖片大小,來驗證一下
以第一張圖片為例,共有8381=6723個像素點,用RGB模式,每個像素三個字節,共有67233=20667b=20kb,但是我這張圖片只有11.6kb,誤差太大了吧,這時候我們就要介紹一下上面那個im.format
屬性了,這張圖片采用png格式,我們先嘗試一下把他轉成JPG格式吧
im.save('1.jpg')
我們再查看一下這個1.jpg
的大小,只有2.24kb了,我們用PIL打開這張圖片
>>> im2 = Image.open('1.jpg')
>>> print im2.format, im2.size, im2.mode
JPEG (83, 81) RGB
圖片大小沒有改變,但是format變成了JPEG,而且文件大小變成原來的1/5, JPEG和GIF和PNG是三種圖片壓縮技術,他們使用壓縮算法把圖片壓縮成很小,當我們打開圖片時,解密算法把他還原出來,所以我們算出來的大小與壓縮后的大小是不一樣的。 有了這些概念我們就能更好的使用PIL提供給我們的magic方法,下次在談我對PIL的高級應用吧。