日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

(python)图片处理Pillow模块的使用

發(fā)布時(shí)間:2024/4/24 综合教程 48 生活家
生活随笔 收集整理的這篇文章主要介紹了 (python)图片处理Pillow模块的使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Pillow中最重要的類就是Image,該類存在于同名的模塊中。可以通過(guò)以下幾種方式實(shí)例化:從文件中讀取圖片,處理其他圖片得到,或者直接創(chuàng)建一個(gè)圖片。

還有一個(gè)類為ImageDraw,用來(lái)畫(huà)圖。

1、Image.alpha_composite(im1,im2)

將im2復(fù)合到im1上,返回一個(gè)Image對(duì)象

參數(shù):im1--第一個(gè)圖像

im2--第二個(gè)圖像 im1和im2的size要相同。且im1和im2的mode都必須是RGBA

#!coding=utf-8
from PIL import Image
img1=Image.new("RGBA",(100,100),"red")
img2=Image.new("RGBA",(100,100),"yellow")
img3=Image.alpha_composite(img1,img2)
img3.show

結(jié)果為:

2、Image.blend(im1,im2,alpha)

返回回一個(gè)融合后的Image對(duì)象,得到的Image由im1和im2決定。:公式:out=im1*(1-alpha)+im2*alpha

參數(shù):im1--第一個(gè)圖像

im2--第二個(gè)圖像 im1和im2的size要相同。

alpha--如果 alpha = 0.0, 第一個(gè)圖像返回. 如果alpha =1.0, 第2個(gè)圖像返回.alpha沒(méi)有嚴(yán)格的值,如果有必要,就設(shè)置成剛好合適的范圍內(nèi)。

例子:

#!coding=utf-8
from PIL import Image
path="E:\study\test.png"
img1=Image.open(path)
img2=Image.new("RGB",img1.size,"red")
img3=Image.blend(img1,img2,0.5) #img1和img2的size要相同,不然會(huì)引起一個(gè)ValueError
img3.show()

 img1在合并img2前的圖片為:

img1和img2合并后,得到的img3為:

3、PIL.Image.composite(im1,im2,mask)

通過(guò)使用透明遮罩混合圖像創(chuàng)建復(fù)合圖像。

參數(shù):im1--第一個(gè)圖像

im2--第二個(gè)圖像 im1和im2的size和mode必須相同。

mask--也是一個(gè)圖像,mode 可以為“1”, “L”, or “RGBA”,并且大小要和im1、im2一樣

#!coding=utf-8
from PIL import Image
from PIL import ImageDraw
path1="E:\study\test.png"
img1=Image.open(path1)
img2=Image.new("RGB",img1.size,"blue")
img3=Image.new("RGBA",img1.size,"black")
img4=Image.composite(img1,img2,img3)
img4.show()

得到的結(jié)果:

其他例子:

例子1:畫(huà)一個(gè)藍(lán)底的圖片,圖片中有一個(gè)紅色的圓

#! coding=utf-8
from PIL import Image
from PIL import ImageDraw
path="E:\study\yy.png" #文件存儲(chǔ)的路徑
image=Image.new("RGB",(200,200),"blue")#創(chuàng)建一個(gè)藍(lán)色的,大小為200*200像素的RGB圖片
drawObject=ImageDraw.Draw(image)
drawObject.ellipse((50,50,80,80),fill="red")#在image上畫(huà)一個(gè)紅色的圓
image.save(path)#保存圖片
"""以下代碼用來(lái)顯示出畫(huà)的圖片"""
try:
    img=Image.open(path)
    img.show()#標(biāo)準(zhǔn)版本的show()方法不是很有效率,因?yàn)樗葘D像保存為一個(gè)臨時(shí)文件,然后使用xv進(jìn)行顯示。如果沒(méi)有安裝xv,該函數(shù)甚至不能工作。但是該方法非常便于debug和test。(windows中應(yīng)該調(diào)用默認(rèn)圖片查看器打開(kāi))
except IOError,e:
    print e.message

  結(jié)果圖片展示結(jié)果:

例子2:將QQ 頭像(或者微博頭像)右上角加上一個(gè)圓形紅色底的白色數(shù)字,類似于微信未讀信息數(shù)量那種提示效果。

#! coding=utf-8
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
path="E:\study\test.png" #文件存儲(chǔ)的路徑
path2="E:\study\test2.png"
Font3 = ImageFont.truetype("C:WindowsFontssimsunb.ttf",20)
text="3"
img=Image.open(path)
box1=(55,0,75,20)
drawObject=ImageDraw.Draw(img)
drawObject.ellipse(box1,fill="red")
drawObject.text([60,2],text,fill="white",font=Font3)#寫(xiě)入文字3
img.save(path2)
"""以下代碼用來(lái)顯示出畫(huà)的圖片"""
try:
    image=Image.open(path2)
    image.show()#標(biāo)準(zhǔn)版本的show()方法不是很有效率,因?yàn)樗葘D像保存為一個(gè)臨時(shí)文件,然后使用xv進(jìn)行顯示。如果沒(méi)有安裝xv,該函數(shù)甚至不能工作。但是該方法非常便于debug和test。(windows中應(yīng)該調(diào)用默認(rèn)圖片查看器打開(kāi))
except IOError,e:
    print e.message

結(jié)果圖片顯示結(jié)果:

相關(guān)函數(shù)如下:

一、Image Module(from PIL import Image)

Image.open(fp)--fp可以是文件名,也可是file object,但是必須是以'r'模式打開(kāi)的。最后返回一個(gè)Image 對(duì)象

Image.blend(im1,im2,alpha) --返回一個(gè)融合后的Image對(duì)象,out=im1*(1-alpha)+im2*alpha

Image.composite(im1,im2,mask)--返回一個(gè)融合后的Image對(duì)象,out由透明遮罩mask和原始im1,im2決定,mask模式為'1','L'或'RGBA'

L模式下:out=im1*L/255+im2*(1-L/255)

RGBA模式下:out=im1*mask+im2*(1-mask),mask的值由mask圖像在該點(diǎn)是否為空及alpha值決定

--使用RGBA模式的mask(ImageDraw畫(huà)出矩形或圓形等局部圖形)可以實(shí)現(xiàn)局部透明度的變化

blend方法要想實(shí)現(xiàn)局部透明度變化只能crop,paste

Image.eval(im,func) --func為接受一個(gè)整數(shù)參數(shù)的函數(shù),將im的每個(gè)像素值分別傳給func處理并返回最后的Image對(duì)象

Image.new(mode,size,color=0) --創(chuàng)建一個(gè)新對(duì)象,mode為單通道時(shí),color為一個(gè)整數(shù)或浮點(diǎn)數(shù);

多通道時(shí),color為元組,元素?cái)?shù)目對(duì)應(yīng)通道數(shù)。

Image.fromarray(obj,mode=None) --從含有array interface 的其他對(duì)象創(chuàng)建Image對(duì)象

Image.merge(mode,bands) --融合多個(gè)通道圖像

Image 對(duì)象的屬性(im=Image.open(fp))

im.mode--如'L','RGB'等

im.size--(200,300)

im.format --如'JPEG'

im.info 、im.palette

Image 對(duì)象的方法(im=Image.open(fp))

im.convert(mode)--轉(zhuǎn)換模式,如'L','RGB'

im.copy() --復(fù)制,不影響原圖像

im.crop(box) --復(fù)制一部分圖像,box為一個(gè)元組,定義矩形的左上角和右下角。改變?cè)瓐D像,可能會(huì)也可能不會(huì)影響crop的部分,

如果想使復(fù)制的部分脫離原圖像的影響,對(duì)crop后的部分采用load方法

im.getbands() --返回一個(gè)包含各通道名稱的元組

im.getbbox() --返回非空邊界矩形,左上點(diǎn)和右下點(diǎn)

im.getdata() --返回一個(gè)扁平化的圖像像素序列(PIL內(nèi)在類型),之后需要使用list()方法將其轉(zhuǎn)化為python語(yǔ)言的序列

im.getextrema() --返回每個(gè)通道中像素值得(min,max)值

im.getpixel((x,y)) --返回(x,y)處的像素值

im.histogram() --返回直方圖統(tǒng)計(jì)數(shù)據(jù)

im.paste(im1,box=None)--將im1粘貼到im上,box默認(rèn)為None,表示從(0,0)開(kāi)始粘貼,也可以設(shè)置為其他二元元組或四元元組

設(shè)置為四元元組時(shí),im1的大小必須和box表示的矩形大小一樣。另外,'RGBA'模式的alpha將被忽視

im.resize(size,resample=0) --調(diào)整大小,resample有四個(gè)選項(xiàng),默認(rèn)為第一個(gè),第四個(gè)質(zhì)量更高一些

Image.NEAREST:nearest neighbour

Image.BILINEAR:linear interpolation

Image.BICUBIC:cubic spline interpolation

Image.LANCZOS:a high-quality downsa

mpling filter

im.rotate(degrees,resample=0,expand=0) --逆時(shí)針旋轉(zhuǎn)某一度數(shù),resample有三個(gè)選項(xiàng),默認(rèn)第一個(gè);expand默認(rèn)為0,

保持旋轉(zhuǎn)后圖像和原來(lái)大小相同,超出邊界的部分舍掉,設(shè)置為T(mén)rue則擴(kuò)展圖像大小以保證能全部顯示原圖像的內(nèi)容

im.save(fp,format=None) --保存圖像

im.show(title=None) --調(diào)試時(shí)常用來(lái)顯示圖像

im.split() --分離通道,返回分離后的通道元組

im.transpose(method)--旋轉(zhuǎn)圖像,method有:Image.FLIP_LEFT_RIGHT 左右顛倒

Image.FLIP_TOP_BOTTOM 上下顛倒

Image.ROTATE_90 逆時(shí)針旋轉(zhuǎn)90度

Image.ROTATE_180 逆時(shí)針旋轉(zhuǎn)180度

Image.ROTATE_270 逆時(shí)針旋轉(zhuǎn) 270度

Image.TRANSPOSE 上下左右顛倒

im.load() --分配圖像存儲(chǔ)空間,載入像素?cái)?shù)據(jù),一般open得到的對(duì)象會(huì)自動(dòng)調(diào)用,無(wú)需手動(dòng)調(diào)用

因?yàn)榇朔椒〞?huì)使圖像對(duì)象和原文件斷絕聯(lián)系,故在im.crop()后可用于切斷復(fù)制部分與原圖像的聯(lián)系

二、ImgaeFont Module (from PIL import ImageFont)

ImageFont.load(filename) --加載字體文件,返回一個(gè)font對(duì)象

ImageFont.load_path(filename) --加載字體文件,會(huì)沿著Python Path尋找

ImageFont.truetype(font=None,size=10,index=0) --加載TrueType或opentype類型的字體文件,返回一個(gè)size大小的font對(duì)象

當(dāng)前目錄沒(méi)有該文件則去windows的fonts目錄下查找

index決定加載哪個(gè)font face(一個(gè)字體文件可能會(huì)包含多個(gè)相關(guān)的字體)

ImageFont對(duì)象方法(font=ImageFont.load(f)):

font.getsize(text)--返回text在當(dāng)前字體下的大小

3.ImageColor Module (from PIL import ImageColor)

ImageColor.getrgb(color) --將字符串形式的color轉(zhuǎn)換為rgb的形式,即(r,g,b[,a])

ImageColor.getcolor(color,mode) --將字符串形式的color轉(zhuǎn)換為rgb或greyscale的形式

mode是color(如’RGB'),則返回(r,g,b[,a]);不是color(如'L')則返回(graylevel[,a])

該模塊支持的color字符串的形式有以下幾種:

(1)十六進(jìn)制形式,#rgb或者#rrggbb,如#00ff00,#0b1

(2)RGB Function,如rgb(255,0,0)或者rgb(100%,0%,20%)

(3)HSL模式,如hsl(0,20%,100%),hsl(360,0%,100%)

(4)HTML顏色,如'red','Red'

三、ImageDraw Module (from PIL import ImageDraw)

ImageDraw.Draw(im) --返回一個(gè)繪圖對(duì)象,使以后的繪圖操作發(fā)生在im上

Draw對(duì)象方法(draw=ImageDraw.Draw(im)):

注:無(wú)特殊說(shuō)明,參數(shù)box類型默認(rèn)為[x,y,x,y]或[(x,y),(x,y)];xy參數(shù)類型默認(rèn)為[x,y,x,y,x,y...]或者[(x,y),(x,y),(x,y),...]

draw.arc(box,start,end,fill=None) --start定義起始角度(0代表3點(diǎn)鐘方向),end定義終止角度,都為degrees,正方向?yàn)轫槙r(shí)針。

draw.chord(box,start,end,fill=None,outline=None) --類似arc,但是連接首尾端

點(diǎn),fill為填充顏色,outline為描邊顏色

draw.ellipse(box,fill=None,outline=None) --畫(huà)一個(gè)橢圓

draw.line(xy,fill=None,width=0) --直線

draw.pieslice(box,start,end,fill=None,outline=None) --畫(huà)一個(gè)扇形

draw.points(xy,fill=None) --點(diǎn)

draw.polygon(xy,fill=None,outline=None) --畫(huà)一個(gè)多邊形

draw.rectangle(box,fill=None,outline=None) --矩形

draw.text(xy,text,fill=None,font=None) --xy為左上點(diǎn)位置,font為ImageFont對(duì)象

draw.textsize(text,font=None) --返回text在font字體下的大小

總結(jié)

以上是生活随笔為你收集整理的(python)图片处理Pillow模块的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。