PIL基礎html
Pillow 是 PIL的對Python3支持的另一個分支,固然他對Python2也兼容,因爲PIL安裝起來比較煩,而使用pip能夠很輕鬆的安裝Pillow,因此我選擇Pillow使用,可是其核心仍是PIL庫的。git
Python的圖形處理庫如PIL一直很強大,可是要想使用好它必須對圖片有必定的知識儲備。 使用起來很簡單github
from PIL import Image
引用Image包web
im = Image.open('1.png')
打開圖片,獲得一個im對象,咱們接下來就能夠對這個對象進行操做(前提有這個1.png圖片)算法
咱們先看一下他的一些屬性canvas
>>> print im.format, im.size, im.mode PNG (83, 81) RGB
第一個咱們輸出圖片的格式,圖片有不少種格式,經常使用的有jpg、png還有gif動圖啊,PIL支持不少種格式,咱們能夠使用PIL輕鬆的將格式轉換,im.save('1.jpg')
,固然你能夠選擇格式假如你沒選好後綴名的話,im.size就是圖片大小,他返回的是一個元組第一個長度第二個是寬度,單位是像素。 如今就談談 這三個屬性對應的關係吧 首先咱們使用一張像素圖來講吧ruby
咱們存貯圖片的時候是將整個圖像分紅不少個相同的小方塊,每一個小方塊咱們稱爲像素,固然一張圖片分的越小,像素越多,那麼圖片就越接近真實圖片,上面的im.size
屬性就告訴咱們,這張圖片分紅了,長爲83px,寬爲81px的圖片,那麼一共有83*81=6723個像素點,每一個像素點裏面存什麼呢,這就是im.mode
屬性告訴咱們的,貼一下屬性有什麼吧markdown
像素存貯就是涉及到顏色的存貯,在早期的黑白遊戲機,只有黑和白兩種,那麼每一個像素點就只有1位顏色來存貯,1位只能存貯兩種顏色,八位色就能存256種顏色,像八位咱們能用256個油漆桶/256色調色板來形容,像上面咱們使用的RGB是由三種三原色紅綠藍混合而成,咱們知道大天然全部的顏色均可以用紅綠藍三種顏色調配出來,因此RGB又被稱爲真彩(true color),每種顏色咱們都分紅256種,因此咱們一共有256256256=16777216種顏色能夠調配,像素的其餘模式咱們不介紹太多,有興趣的能夠本身鑽研。 那麼咱們知道每一個像素佔多少字節,又知道共有多少個像素,那咱們是否是就能夠直接計算出來圖片大小,來驗證一下app
以第一張圖片爲例,共有8381=6723個像素點,用RGB模式,每一個像素三個字節,共有67233=20667b=20kb,可是我這張圖片只有11.6kb,偏差太大了吧,這時候咱們就要介紹一下上面那個im.format
屬性了,這張圖片採用png格式,咱們先嚐試一下把他轉成JPG格式吧ide
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的高級應用吧。