您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“python之怎么使用pil”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
PIL,全稱Python Image Library,主要作用是圖像處理,可用于圖片剪切、粘貼、縮放、鏡像、水印、顏色塊、濾鏡、圖像格式轉(zhuǎn)換、色場(chǎng)空間轉(zhuǎn)換、驗(yàn)證碼、旋轉(zhuǎn)圖像、圖像增強(qiáng)、直方圖處理、插值和濾波等功能。不過只支持到Python 2.7。Pillow是PIL的一個(gè)派生分支,但如今已經(jīng)發(fā)展成為比PIL本身更具活力的圖像處理庫(kù)。我們需要安裝的就是Pillow。
PIL具體用途:
圖像歸檔(Image Archives)。PIL非常適合于圖像歸檔以及圖像的批處理任務(wù)。你可以使用PIL創(chuàng)建縮略圖,轉(zhuǎn)換圖像格式,打印圖像等等。
圖像展示(Image Display)。PIL較新的版本支持包括Tk PhotoImage,BitmapImage還有Windows DIB等接口。PIL支持眾多的GUI框架接口,可以用于圖像展示。
圖像處理(Image Processing)。PIL包括了基礎(chǔ)的圖像處理函數(shù),包括對(duì)點(diǎn)的處理,使用眾多的卷積核(convolution kernels)做過濾(filter),還有顏色空間的轉(zhuǎn)換。PIL庫(kù)同樣支持圖像的大小轉(zhuǎn)換,圖像旋轉(zhuǎn),以及任意的仿射變換。PIL還有一些直方圖的方法,允許你展示圖像的一些統(tǒng)計(jì)特性。這個(gè)可以用來實(shí)現(xiàn)圖像的自動(dòng)對(duì)比度增強(qiáng),還有全局的統(tǒng)計(jì)分析等。
pip install Pillow
貌似Pillow是默認(rèn)安裝好了的,可以通過pip list
查看是否已經(jīng)安裝
以下是打開圖片保存圖片的基本操作。
from PIL import Image # 1.打開圖片 img = Image.open("image/10.jpg") # 2.顯示圖片(執(zhí)行顯示圖片后線程會(huì)中斷,關(guān)閉圖像后恢復(fù)) img.show() # 3.保存圖片 img.save("image/xiaomai.jpg")
我在嘗試的過程中發(fā)現(xiàn),jpg格式的圖片保存為jpg格式時(shí)會(huì)報(bào)錯(cuò):OSError: cannot write mode RGBA as JPEG
,經(jīng)過查閱資料發(fā)現(xiàn)錯(cuò)誤原因主要是因?yàn)閖pg格式和JPG格式圖片的通道數(shù)不同。
jpg是四通道:RGBA意思是紅色,綠色,藍(lán)色,Alpha的色彩空間,Alpha指透明度
JPG是三通道:RGB意思是紅色,綠色,藍(lán)色
所以,jpg格式圖片要保存成JPG格式就要丟棄A通道:
from PIL import Image # 1.打開圖片 img = Image.open("image/10.jpg") # 2.顯示圖片(執(zhí)行顯示圖片后線程會(huì)中斷,關(guān)閉圖像后恢復(fù)) img.show() # 3.保存圖片 img = img.convert("RGB") img.save("image/xiaomai.jpg")
下面是圖片旋轉(zhuǎn)的代碼:
from PIL import Image # 1.打開圖片 img = Image.open("pli/7.jpg") # 2.水平翻轉(zhuǎn) img1 = img.transpose(Image.FLIP_LEFT_RIGHT) # 3.保存圖片 img1.save("pli/1.jpg") # 4.垂直翻轉(zhuǎn) img2 = img.rotate(180) # 5.保存照片 img2.save("pli/2.jpg") # 6.水平+垂直翻轉(zhuǎn) img3 = img.transpose(Image.FLIP_LEFT_RIGHT).rotate(180) # 7.保存圖片 img3.save("pli/3.jpg")
要在圖像上繪制文本要用到 PIL 的兩個(gè)模塊:ImageDraw和ImageFont。 ImageDraw 用于創(chuàng)建繪圖對(duì)象,ImageFont用于加載字體。
from PIL import Image, ImageDraw, ImageFont # 1.打開圖片 img = Image.open("image/10.jpg") # 2.調(diào)用畫圖模塊 draw = ImageDraw.Draw(img) # 3.設(shè)置字體 tfont = ImageFont.truetype("萌神手寫體.ttf", 24) # 4.添加文字 """ 參數(shù)一:文字在圖片的位置:(x, y) 參數(shù)二:文字內(nèi)容 參數(shù)三:字體顏色,當(dāng)然顏色也可以用RGB值指定 參數(shù)四:字體類型 """ draw.text((50, 30), "eyes++", fill="green", font=tfont) # 5.保存圖片 img.save("image/addWord.jpg") # 6.顯示圖片 img.show()
from PIL import Image, ImageFilter img = Image.open("image/10.jpg") img = img.filter(ImageFilter.CONTOUR) img.save("image/Filter.jpg") img.show()
濾鏡類型如下:
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:逆時(shí)針轉(zhuǎn)90度
ROTATE_180:逆時(shí)針轉(zhuǎn)180度
ROTATE_270:逆時(shí)針轉(zhuǎn)270度
TRANSPOSE:像素矩陣轉(zhuǎn)置
TRANSVERSE
最后一種模式我也不知道什么意思,也沒查到,但效果是下面這樣的,盲猜是對(duì)角線對(duì)轉(zhuǎn)。。。。。
除了使用transpose制造鏡像,使用rotate也可以的,不過rotate只能旋轉(zhuǎn):
發(fā)現(xiàn)這樣旋轉(zhuǎn)會(huì)有棱角,然后經(jīng)過某位不愿透露姓名的大佬指點(diǎn),發(fā)現(xiàn)是rotate旋轉(zhuǎn)只是像素旋轉(zhuǎn),畫布不動(dòng),于是我寫下了以下測(cè)試代碼:
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")
可以發(fā)現(xiàn)小埋的rotate旋轉(zhuǎn)不會(huì)自動(dòng)填充空白像素,而血小板的會(huì)自動(dòng)黑色填充。是因?yàn)閖pg格式是非失真性壓縮的,允許使用類似于GIF格式的調(diào)色板技術(shù),支持真彩色圖像,并具備阿爾法通道(半透明)等特性。而jpg格式?jīng)]有阿爾法通道,因此jpg格式圖片不能為透明,jpg格式可以。
雖說是拼接,但更像是將兩幅圖粘貼到一個(gè)新的畫布上
from PIL import Image, ImageDraw # 打開圖片 img1 = Image.open("image/10.jpg") img2 = Image.open("image/addWord.jpg") # 查看圖片尺寸,便于拼接圖片 print(img1.size) print(img1.size) # 新建空白圖片,三個(gè)參數(shù)分別是模式(RGB/RGBA)、大小、顏色 newimg = Image.new(mode="RGB", size=(1174, 614), color=(255, 100, 50)) # 拼接圖片,第一個(gè)參數(shù)是圖片,第二個(gè)是起始位置 newimg.paste(img1, (0, 0)) newimg.paste(img2, (587, 0)) newimg.show()
圖片裁剪用到的方法是image.crop(),這個(gè)方法能從圖像中提取出某個(gè)矩形大小的圖像。它接收一個(gè)四元素的元組作為參數(shù),各元素為(left, upper, right, lower),坐標(biāo)系統(tǒng)的原點(diǎn)(0, 0)是左上角。
from PIL import Image img = Image.open("image/10.jpg") print(img.size) imgCut = img.crop((100, 200, 500, 600)) imgCut.show()
在這里插入代碼片
可能這么看不是二分之一,但這是顯示問題,可以看數(shù)據(jù):
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')
如果有興趣了解更多相關(guān)內(nèi)容,可以來我的個(gè)人網(wǎng)站看看:eyes++的個(gè)人網(wǎng)站
“python之怎么使用pil”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。