python之pil的使用詳解
一:PIL功能介紹與安裝
PIL,全稱Python Image Library,主要作用是圖像處理,可用於圖片剪切、粘貼、縮放、鏡像、水印、顏色塊、濾鏡、圖像格式轉換、色場空間轉換、驗證碼、旋轉圖像、圖像增強、直方圖處理、插值和濾波等功能。不過隻支持到Python 2.7。Pillow是PIL的一個派生分支,但如今已經發展成為比PIL本身更具活力的圖像處理庫。我們需要安裝的就是Pillow。
PIL具體用途:
- 圖像歸檔(Image Archives)。PIL非常適合於圖像歸檔以及圖像的批處理任務。你可以使用PIL創建縮略圖,轉換圖像格式,打印圖像等等。
- 圖像展示(Image Display)。PIL較新的版本支持包括Tk PhotoImage,BitmapImage還有Windows DIB等接口。PIL支持眾多的GUI框架接口,可以用於圖像展示。
- 圖像處理(Image Processing)。PIL包括瞭基礎的圖像處理函數,包括對點的處理,使用眾多的卷積核(convolution kernels)做過濾(filter),還有顏色空間的轉換。PIL庫同樣支持圖像的大小轉換,圖像旋轉,以及任意的仿射變換。PIL還有一些直方圖的方法,允許你展示圖像的一些統計特性。這個可以用來實現圖像的自動對比度增強,還有全局的統計分析等。
pip install Pillow
貌似Pillow是默認安裝好瞭的,可以通過pip list
查看是否已經安裝
二:PIL的基本操作
以下是打開圖片保存圖片的基本操作。
from PIL import Image # 1.打開圖片 img = Image.open("image/10.jpg") # 2.顯示圖片(執行顯示圖片後線程會中斷,關閉圖像後恢復) img.show() # 3.保存圖片 img.save("image/xiaomai.jpg")
我在嘗試的過程中發現,jpg格式的圖片保存為jpg格式時會報錯:OSError: cannot write mode RGBA as JPEG
,經過查閱資料發現錯誤原因主要是因為jpg格式和JPG格式圖片的通道數不同。
- jpg是四通道:RGBA意思是紅色,綠色,藍色,Alpha的色彩空間,Alpha指透明度
- JPG是三通道:RGB意思是紅色,綠色,藍色
所以,jpg格式圖片要保存成JPG格式就要丟棄A通道:
from PIL import Image # 1.打開圖片 img = Image.open("image/10.jpg") # 2.顯示圖片(執行顯示圖片後線程會中斷,關閉圖像後恢復) img.show() # 3.保存圖片 img = img.convert("RGB") img.save("image/xiaomai.jpg")
下面是圖片旋轉的代碼:
from PIL import Image # 1.打開圖片 img = Image.open("pli/7.jpg") # 2.水平翻轉 img1 = img.transpose(Image.FLIP_LEFT_RIGHT) # 3.保存圖片 img1.save("pli/1.jpg") # 4.垂直翻轉 img2 = img.rotate(180) # 5.保存照片 img2.save("pli/2.jpg") # 6.水平+垂直翻轉 img3 = img.transpose(Image.FLIP_LEFT_RIGHT).rotate(180) # 7.保存圖片 img3.save("pli/3.jpg")
三:給圖片增加文字
要在圖像上繪制文本要用到 PIL 的兩個模塊:ImageDraw和ImageFont。 ImageDraw 用於創建繪圖對象,ImageFont用於加載字體。
from PIL import Image, ImageDraw, ImageFont # 1.打開圖片 img = Image.open("image/10.jpg") # 2.調用畫圖模塊 draw = ImageDraw.Draw(img) # 3.設置字體 tfont = ImageFont.truetype("萌神手寫體.ttf", 24) # 4.添加文字 """ 參數一:文字在圖片的位置:(x, y) 參數二:文字內容 參數三:字體顏色,當然顏色也可以用RGB值指定 參數四:字體類型 """ draw.text((50, 30), "eyes++", fill="green", font=tfont) # 5.保存圖片 img.save("image/addWord.jpg") # 6.顯示圖片 img.show()
四:PIL濾鏡功能
from PIL import Image, ImageFilter img = Image.open("image/10.jpg") img = img.filter(ImageFilter.CONTOUR) img.save("image/Filter.jpg") img.show()
濾鏡類型如下:
五:PIL鏡像功能
from PIL import Image img = Image.open("image/10.jpg") img = img.transpose(Image.FLIP_LEFT_RIGHT) img.save("image/mirror.jpg")
transpose
有這麼幾種模式
- FLIP_LEFT_RIGHT:左右鏡像
- FLIP_TOP_BOTTOM:上下鏡像
- ROTATE_90:逆時針轉90度
- ROTATE_180:逆時針轉180度
- ROTATE_270:逆時針轉270度
- TRANSPOSE:像素矩陣轉置
- TRANSVERSE
最後一種模式我也不知道什麼意思,也沒查到,但效果是下面這樣的,盲猜是對角線對轉。。。。。
除瞭使用transpose制造鏡像,使用rotate也可以的,不過rotate隻能旋轉:
發現這樣旋轉會有棱角,然後經過某位不願透露姓名的大佬指點,發現是rotate旋轉隻是像素旋轉,畫佈不動,於是我寫下瞭以下測試代碼:
from PIL import Image img = Image.open("image/12.jpg") img1 = img.transpose(Image.ROTATE_90) img1.save("image/test.jpg") img2 = img.rotate(90) img2.save("image/test2.jpg")
可以發現小埋的rotate旋轉不會自動填充空白像素,而血小板的會自動黑色填充。是因為jpg格式是非失真性壓縮的,允許使用類似於GIF格式的調色板技術,支持真彩色圖像,並具備阿爾法通道(半透明)等特性。而jpg格式沒有阿爾法通道,因此jpg格式圖片不能為透明,jpg格式可以。
六:圖片拼接功能
雖說是拼接,但更像是將兩幅圖粘貼到一個新的畫佈上
from PIL import Image, ImageDraw # 打開圖片 img1 = Image.open("image/10.jpg") img2 = Image.open("image/addWord.jpg") # 查看圖片尺寸,便於拼接圖片 print(img1.size) print(img1.size) # 新建空白圖片,三個參數分別是模式(RGB/RGBA)、大小、顏色 newimg = Image.new(mode="RGB", size=(1174, 614), color=(255, 100, 50)) # 拼接圖片,第一個參數是圖片,第二個是起始位置 newimg.paste(img1, (0, 0)) newimg.paste(img2, (587, 0)) newimg.show()
七:PIL裁剪功能
圖片裁剪用到的方法是image.crop(),這個方法能從圖像中提取出某個矩形大小的圖像。它接收一個四元素的元組作為參數,各元素為(left, upper, right, lower),坐標系統的原點(0, 0)是左上角。
from PIL import Image img = Image.open("image/10.jpg") print(img.size) imgCut = img.crop((100, 200, 500, 600)) imgCut.show()
在這裡插入代碼片
八:圖片縮放
可能這麼看不是二分之一,但這是顯示問題,可以看數據:
from PIL import Image # : img = Image.open('image/10.jpg') # 獲得圖像尺寸: w, h = img.size # 縮放到50%: img.thumbnail((w//2, h//2)) # 把縮放後的圖像用jpeg格式保存: img.save('image/zoom.jpg')
如果有興趣瞭解更多相關內容,可以來我的個人網站看看:eyes++的個人網站
到此這篇關於python之pil的使用的文章就介紹到這瞭,更多相關python pil 使用內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- python 對圖片進行簡單的處理
- Python 圖像處理 Pillow 庫詳情
- Pillow使用Image篇的使用
- 基於python使用Pillow做動態圖在圖中生成二維碼以及圖像處理
- Python生成截圖選餐GIF動畫