Python的PIL庫的Image模塊

from PIL import Image

 

1、讀取一張圖片:

im=Image.open('C:/Users/admin/Desktop/WallPaper/d.png')

2、顯示一張圖片:

im.show()

3. 保存圖片:

    im.save("save.gif","GIF")      #保存圖像爲gif格式

    im.save("newImg.png","PNG")

4、創建新圖片:

    Image.new(mode, size)  

    Image.new(mode, size, color)  

如果color不賦值,就默認爲0

 

舉例:

img_b = Image.new("RGB",(32,32))#不指定color,則爲黑色#000000

img_r = Image.new("RGB",(32,32),"red")

img_g = Image.new("RGB",(32,32),"#00FF00")

 

5、 convert()函數

image.convert()

用於不同模式圖像之間的轉換

image.convert('RGBA')就是把圖像轉換成RGBA模式

 

PIL中有九種不同模式,分別爲1,L,P,RGB,RGBA,CMYK,YCbCr,I,F

  • 模式“1”爲二值圖像,每個像素用8bit表示,0表示黑,255表示白c
  • 模式L爲灰色圖像,它的每個像素用8個bit表示,0表示黑,255表示白,其他數字表示不同的灰度c
  • 模式“P”爲8位彩色圖像,它的每個像素用8個bit表示,其對應的彩色值是按照調色板查詢出來的
  • 模式“RGBA”爲32位彩色圖像,它的每個像素用32個bit表示,其中24bit表示紅色、綠色和藍色三個通道,另外8bit表示alpha通道,即透明通道。
  • 模式“CMYK”爲32位彩色圖像,它的每個像素用32個bit表示。模式“CMYK”就是印刷四分色模式,它是彩色印刷時採用的一種套色模式。四種標準顏色是:C:Cyan = 青色,又稱爲‘天藍色’或是‘湛藍’M:Magenta = 品紅色,又稱爲‘洋紅色’;Y:Yellow = 黃色;K:Key Plate(blacK) = 定位套版色(黑色)。
  • 模式“YCbCr”爲24位彩色圖像,它的每個像素用24個bit表示。其中Y是指亮度分量,Cb指藍色色度分量,而Cr指紅色色度分量。人的肉眼對視頻的Y分量更敏感,因此在通過對色度分量進行子採樣來減少色度分量後,肉眼將察覺不到的圖像質量的變化。
  • 模式“I”爲32位整型灰色圖像,它的每個像素用32個bit表示,0表示黑,255表示白,(0,255)之間的數字表示不同的灰度
  • 模式“F”爲32位浮點灰色圖像,它的每個像素用32個bit表示,0表示黑,255表示白,(0,255)之間的數字表示不同的灰度

 

       對於彩色圖像,不管其圖像格式是PNG,還是BMP,或者JPG,在PIL中,使用Image模塊的open()函數打開後,返回的圖像對象的模式都是“RGB”

      對於灰度圖像,不管其圖像格式是PNG,還是BMP,或者JPG,打開後,其模式爲“L”。

 

查看當前圖像的模式

im.mode

 

6、Image.alpha_composite()函數

im = Image.alpha_composite(im1,im2)

將im2複合到im1上,返回一個Image對象

 

注意:im1和im2的size要相同。且im1和im2的mode都必須是RGBA

7、Image.resize() 縮放

img.resize((width, height),Image.ANTIALIAS)

第二個參數:
Image.NEAREST :低質量
Image.BILINEAR:雙線性
Image.BICUBIC :三次樣條插值
Image.ANTIALIAS:高質量

8、img.paste() 函數

img.paste(img2,(x,y))

將img2圖片貼到img上面,x,y是粘貼起始點的橫縱座標

9、img.putalpha() 函數

im.putalpha(alpha)

圖像 im 必須是 "RGBA",alpha 必須是 "L" 或 "1".

可以將一張與原圖尺寸相同的圖片寫入到原圖片的透明通道之中,但不會影響原圖片的正常顯示. 可用於信息隱藏

如果原圖沒有透明通道,可以採用 PIL 的 im.convert 函數,轉換爲 "RGBA" 模式;同時確保要隱藏的信息圖像爲 "L" 或 "1" 模式.

10、img.point() 函數

通過一個函數或者查詢表對圖像中的像素點進行處理(例如對比度操作)

如 out = im.point(lambda i: i * 1.2)

 

 

 

6. 兩張圖片相加:

    Image.blend(img1, img2, alpha)    # 這裏alpha表示img1和img2的比例參數

7. 點操作:

    im.point(function) #,這個function接受一個參數,且對圖片中的每一個點執行這個函數
    比如:out = im.point(lambda i : i*1.5)#對每個點進行50%的加強

8. 查看圖像信息:
    im.format, im.size, im.mode

9.  圖片裁剪:
    box = (100,100,500,500)  #設置要裁剪的區域 

    region = im.crop(box)     #此時,region是一個新的圖像對象。

10. 圖像黏貼(合併)

    im.paste(region, box)#粘貼box大小的region到原先的圖片對象中。 

11. 通道分離:
   r,g,b = im.split()#分割成三個通道  ,此時r,g,b分別爲三個圖像對象。

12. 通道合併:
   im = Image.merge("RGB", (b, g, r))#將b,r兩個通道進行翻轉。

13. 改變圖像的大小:
   out = img.resize((128, 128))#resize成128*128像素大小

14. 旋轉圖像:
   out = img.rotate(45) #逆時針旋轉45度  
   有更方便的:
   region = region.transpose(Image.ROTATE_180)

15. 圖像轉換:
   out = im.transpose(Image.FLIP_LEFT_RIGHT)#左右對換。

  out= im.transpose(Image.FLIP_TOP_BOTTOM)#上下對換

16. 圖像類型轉換:
    im=im.convert("RGBA")

17. 獲取某個像素位置的值:
   im.getpixel((4,4))

18.  寫某個像素位置的值:
   img.putpixel((4,4),(255,0,0))
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章