安裝 pip3 install pillow spa
PIL中所涉及的基本概念有以下幾個:通道(bands)、模式(mode)、尺寸(size)、座標系統(coordinate system)、調色板(palette)、信息(info)和濾波器(filters)code
一、 通道orm
以RGB圖像爲例,每張圖片都是由三個數據通道構成,分別爲R、G和B通道。而對於灰度圖像,則只有一個通道視頻
二、 模式對象
圖像的模式定義了圖像的類型和像素的位寬。當前支持以下模式:blog
1:1位像素,表示黑和白,可是存儲的時候每一個像素存儲爲8bit。 L:8位像素,表示黑和白。 P:8位像素,使用調色板映射到其餘模式。 RGB:3x8位像素,爲真彩色。 RGBA:4x8位像素,有透明通道的真彩色。 CMYK:4x8位像素,顏色分離。 YCbCr:3x8位像素,彩色視頻格式。 I:32位整型像素。 F:32位浮點型像素。 PIL也支持一些特殊的模式,包括RGBX(有padding的真彩色)和RGBa(有自左乘alpha的真彩色)
三、 尺寸 圖片
經過size屬性能夠獲取圖片的尺寸。這是一個二元組,包含水平和垂直方向上的像素數 ip
四、 座標系統 get
PIL使用笛卡爾像素座標系統,座標(0,0)位於左上角。注意:座標值表示像素的角;位於座標(0,0)處的像素的中心實際上位於(0.5,0.5)。it
座標常常用於二元組(x,y)。長方形則表示爲四元組,前面是左上角座標。例如,一個覆蓋800x600的像素圖像的長方形表示爲(0,0,800,600)
五、 調色板
調色板模式 ("P")使用一個顏色調色板爲每一個像素定義具體的顏色值
六、 信息
使用info屬性能夠爲一張圖片添加一些輔助信息。這個是字典對象。加載和保存圖像文件時,多少信息須要處理取決於文件格式
七、 濾波器
對於將多個輸入像素映射爲一個輸出像素的幾何操做,PIL提供了4個不一樣的採樣濾波器:
NEAREST:最近濾波。從輸入圖像中選取最近的像素做爲輸出像素。它忽略了全部其餘的像素。 BILINEAR:雙線性濾波。在輸入圖像的2x2矩陣上進行線性插值。注意:PIL的當前版本,作下采樣時該濾波器使用了固定輸入模板。 BICUBIC:雙立方濾波。在輸入圖像的4x4矩陣上進行立方插值。注意:PIL的當前版本,作下采樣時該濾波器使用了固定輸入模板。 ANTIALIAS:平滑濾波。這是PIL 1.1.3版本中新的濾波器。對全部能夠影響輸出像素的輸入像素進行高質量的重採樣濾波,以計算輸出像素值。在當前的PIL版本中,這個濾波器只用於改變尺寸和縮略圖方法。 注意:在當前的PIL版本中,ANTIALIAS濾波器是下采樣(例如,將一個大的圖像轉換爲小圖)時惟一正確的濾波器。BILIEAR和BICUBIC濾波器使用固定的輸入模板,用於固定比例的幾何變換和上採樣是最好的
from PIL import Image im=Image.open(r'./大象.jpg') #打開圖像 #im.show() #顯示圖像 #打開的圖像能夠是jpg、bmp、png、GIF等 print(im.format) #返回圖像的格式 #PNG print(im.size) #返回圖像的大小 #(499, 334) im1 = im.resize((256,256)) #圖像的縮放 #返回的是新圖像,不是在原來的圖像上縮放 print(im.getbands()) #返回通道的名稱 #('R', 'G', 'B') print(im.mode) #返回圖像的模式 #RGB print(print(im.info)) #返回圖片信息 #{'dpi': (96, 96)} #None print(im.palette) #顏色調色板表格 #若是圖像的模式是「P」,則返回ImagePalette類的實例;不然,將爲None print(im.getpixel((100, 50))) #返回指定座標的顏色值 #(191, 191, 191) #im.putpixel((100,50),(255,0,0)) #給指定座標值賦值顏色 #im.save('pp.bmp') #保存圖像---只要是支持的格式就行 im2=im.rotate(90) #支持任意角度的旋轉--單位度--正數逆時針 #transpose支持部分特殊角度的旋轉,如90、180、270、水平和垂直翻轉 im3=im.transpose(Image.ROTATE_270) #逆時針旋轉270度 #Image.ROTATE_90 逆時針旋轉90度 #im4=im.transpose(Image.FLIP_LEFT_RIGHT) #Image.ROTATE_270 im4=im.transpose(Image.FLIP_LEFT_RIGHT) #左右翻轉 im5=im.transpose(Image.FLIP_TOP_BOTTOM) #上下翻轉 box=(120,194,220,294) #區域 im6=im.crop(box) #裁剪 im6=im6.transpose(Image.ROTATE_180) #im.paste(im6,box) #把圖像im6粘貼到圖像im上
from PIL import ImageFilter,Image im=Image.open(r'./彩色.jpg') im5=im.filter(ImageFilter.DETAIL) #圖像加強 im6=im.filter(ImageFilter.BLUR) #圖像模糊 im7=im.filter(ImageFilter.FIND_EDGES) #圖像邊緣提取 im8=im.point(lambda i:i*1.3) #修改亮度 #使每一個點的亮度加強1.3倍 #圖像加強方式二 from PIL import ImageEnhance enh=ImageEnhance.Brightness(im) im9=enh.enhance(1.3) enh1=ImageEnhance.Contrast(im) #須要 from PIL import ImageEnhance im10=enh1.enhance(1.3) #對比度加強1.3倍 #紅綠藍分別處理 r,g,b=im.split() #把圖像分割成紅綠藍三個子圖 r=r.point(lambda i:i*1.3) g=g.point(lambda i:i*0.9) b=r.point(lambda i:0) im11=Image.merge(im.mode,(r,g,b)) #把三個子圖合併成一個圖像 im11.show()
from PIL import ImageFilter,Image im=Image.open(r'./彩色.jpg') im5=im.filter(ImageFilter.DETAIL) #圖像加強 im6=im.filter(ImageFilter.BLUR) #圖像模糊 im7=im.filter(ImageFilter.FIND_EDGES) #圖像邊緣提取 im8=im.point(lambda i:i*1.3) #修改亮度 #使每一個點的亮度加強1.3倍 #圖像加強方式二 from PIL import ImageEnhance enh=ImageEnhance.Brightness(im) im9=enh.enhance(1.3) enh1=ImageEnhance.Contrast(im) #須要 from PIL import ImageEnhance im10=enh1.enhance(1.3) #對比度加強1.3倍 #紅綠藍分別處理 r,g,b=im.split() #把圖像分割成紅綠藍三個子圖 r=r.point(lambda i:i*1.3) g=g.point(lambda i:i*0.9) b=r.point(lambda i:0) im11=Image.merge(im.mode,(r,g,b)) #把三個子圖合併成一個圖像 im11.show()
天子驕龍