PIL庫 (Pillow)


 

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 (1-bit pixels, black and white, stored with one pixel per byte)
  2. L (8-bit pixels, black and white)
  3. P (8-bit pixels, mapped to any other mode using a color palette)
  4. RGB (3x8-bit pixels, true color)
  5. RGBA (4x8-bit pixels, true color with transparency mask)
  6. CMYK (4x8-bit pixels, color separation)
  7. YCbCr (3x8-bit pixels, color video format)
  8. I (32-bit signed integer pixels)
  9. 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的高級應用吧。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM