python,使用PIL庫對圖片進行操作


在做識別驗證碼時,需要對驗證碼圖片進行一些處理,所以就學習了一下PIL的知識,下面是我總結的一些常用方法。

注明:圖片的操作都需要Image庫,所以要使用import Image導入庫

1.打開圖片

import Image
img=Image.open("code.jpg")

注:有些圖片名稱是包含中文的,就需要在“”前加上u,例:img=Image.open(u"阿布.jpg")

以下各個操作均是基於原圖進行的修改,原圖為:

 

2.展示圖片

img.show()

 

3.打印圖片信息

print img.mode,img.size,img.format

打印結果如下:

RGB (508, 493) JPEG

 

4.保存圖片

img.save("img1.png","png")

說明:img為一個圖片,存為一個名叫img1的圖片,格式為png。后面的png不寫也可以,直接按照文件名的后綴.png存為相應格式了。

 

5.創建一個新的圖片

import Image
newImg = Image.new("RGBA",(640,480),(0,255,0))
newImg.save("newImg.png","PNG")

結果如下:

說明:“RGBA”為圖片的mode,(640,480)為圖片尺寸,(0,255,0)為圖片顏色,顏色第四位為alpha值,可填可不填。

 

6.改變圖片尺寸

smallimg=img.resize((128,128),Image.ANTIALIAS)

說明:(128,128)為更改后的尺寸,Image.ANTIALIAS有消除鋸齒的效果。

沒有消除鋸齒的效果如下圖:

消除了鋸齒的效果如下圖:

 

7.圖片類型轉換convert

img=img.convert("RGBA")

說明:將img圖片的mode轉換為"RGBA"格式

 

8.img.split()分割通道

bands=img.split()
rIm=bands[0]
gIm=bands[1]
bIm=bands[2]
aIm=bands[3]

說明:將img代表的圖片分割通道。

如果是RGBA,分割后就有四個通道。bands[0]、bands[1]、bands[2]、bands[3]分別代表了R(red)、G(green)、B(blue)、A(alpha)四個通道。

 

9.merge合並通道

img=img.convert("RGBA")
bands=img.split()
rIm=bands[0]
gIm=bands[1]
bIm=bands[2]
aIm=bands[3]
remadeImage=Image.merge("RGBA",(rIm,gIm,bIm,aIm))
remadeImage.save("remadeImage.png","png")

說明:使用Image.merge("RGBA",(rIm,gIm,bIm,aIm))將通道合成為一個圖片,"RGBA"格式的圖片通道分為R(red)、G(green)、B(blue)、A(alpha)。rIm,gIm,bIm,aIm分別為自定義的R、G、B、A。

 

10.粘貼圖片

import Image
img=Image.open(u"阿布.jpg")
img1=Image.open("code.jpg")
img.paste(img1,(0,10))img.save("img2.png")

說明:img.paster(img1,(0,10)是將圖片img1粘貼到圖片img上。(0,10)是粘貼的坐標位置。

結果如下:

 

11.拷貝圖片,crop

img=Image.open(u"阿布.jpg")
bounds=(0,0,493,254)
cutoutIm=img.crop(bounds)
cutoutIm.save("cotoutIm.png","png")

說明:bounds為自定義的拷貝區域(x1,y1,x2,y2),x1和y1決定了拷貝區域左上角的位置,x2和y2決定了拷貝區域右下角的位置。

img.crop(bounds):拷貝圖片img坐標區域在bounds之間的圖片。

結果如下:

 

12.旋轉圖片rotate

fixedIm=img.rotate(90)
fixedIm.save("fixedIm.png","png")

說明:fixedIm=img.rotate(90),將圖片img逆時針旋轉90度,存到fixedIm中。

結果如下:

 

13.對像素進行操作getpixel,putpixel

img=Image.open("smallimg.png")

img.getpixel((4,4))
img.putpixel((4,4),(255,0,0))
img.save("img1.png","png")

說明:getpixel得到圖片img的坐標為(4,4)的像素點。putpixel將坐標為(4,4)的像素點變為(255,0,0)顏色,即紅色。

結果如下圖所示(因為只有一個像素點,所以不是很清晰):

 

14.使用ImageDraw庫進行畫圖

import ImageDraw

img=Image.open(u'阿布.jpg')
a=ImageDraw.Draw(img)
a.line(((0,0),(508,493)),fill=(255,0,0))
a.line(((0,493),(508,0)),fill=(0,255,0,0))
a.arc((10,10,100,100),0,360,fill=255)
#因為PIL庫編譯時缺少東西,所以導致字體不能更改
#font = ImageFont.truetype ("Arial.ttf",16)
a.text((10,10),"hello",fill=(255,0,0),font=None)
img.save("img1.png")

說明:1.畫圖需要導入ImageDraw庫。

   2.a=ImageDraw.Draw(img),對img圖像進行畫圖操作

   3.a.line,畫直線。((0,0),(508,493))為直線左右起點的坐標。fill=(255,0,0)為直線填充的顏色。

   4.a.arc,畫弧線。(10,20,100,300)為弧線最左側距離左邊、弧線最上面距離上面、弧線最右面距離左面、弧線最下面距離左邊的距離。fill=255為填充的顏色,也可以寫成(255,0,0,0)的格式。

   5.a.text為添加文字,(10,10)為添加文字的位置,fill=(255,0,0)為填充文字的顏色,font為文字的字體,None為沒有樣式,font可以自定義。自定義方法為font = ImageFont.truetype ("Arial.ttf",16)

結果如下圖所示:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM