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.mode9. 圖片裁剪:
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))