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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

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

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

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

還有一個類為ImageDraw,用來畫圖。

1、Image.alpha_composite(im1,im2)

將im2復合到im1上,返回一個Image對象

參數:im1--第一個圖像

im2--第二個圖像 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

結果為:

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

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

參數:im1--第一個圖像

im2--第二個圖像 im1和im2的size要相同。

alpha--如果 alpha = 0.0, 第一個圖像返回. 如果alpha =1.0, 第2個圖像返回.alpha沒有嚴格的值,如果有必要,就設置成剛好合適的范圍內。

例子:

#!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要相同,不然會引起一個ValueError
img3.show()

 img1在合并img2前的圖片為:

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

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

通過使用透明遮罩混合圖像創建復合圖像。

參數:im1--第一個圖像

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

mask--也是一個圖像,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()

得到的結果:

其他例子:

例子1:畫一個藍底的圖片,圖片中有一個紅色的圓

#! coding=utf-8
from PIL import Image
from PIL import ImageDraw
path="E:\study\yy.png" #文件存儲的路徑
image=Image.new("RGB",(200,200),"blue")#創建一個藍色的,大小為200*200像素的RGB圖片
drawObject=ImageDraw.Draw(image)
drawObject.ellipse((50,50,80,80),fill="red")#在image上畫一個紅色的圓
image.save(path)#保存圖片
"""以下代碼用來顯示出畫的圖片"""
try:
    img=Image.open(path)
    img.show()#標準版本的show()方法不是很有效率,因為它先將圖像保存為一個臨時文件,然后使用xv進行顯示。如果沒有安裝xv,該函數甚至不能工作。但是該方法非常便于debug和test。(windows中應該調用默認圖片查看器打開)
except IOError,e:
    print e.message

  結果圖片展示結果:

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

#! coding=utf-8
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
path="E:\study\test.png" #文件存儲的路徑
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)#寫入文字3
img.save(path2)
"""以下代碼用來顯示出畫的圖片"""
try:
    image=Image.open(path2)
    image.show()#標準版本的show()方法不是很有效率,因為它先將圖像保存為一個臨時文件,然后使用xv進行顯示。如果沒有安裝xv,該函數甚至不能工作。但是該方法非常便于debug和test。(windows中應該調用默認圖片查看器打開)
except IOError,e:
    print e.message

結果圖片顯示結果:

相關函數如下:

一、Image Module(from PIL import Image)

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

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

Image.composite(im1,im2,mask)--返回一個融合后的Image對象,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圖像在該點是否為空及alpha值決定

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

blend方法要想實現局部透明度變化只能crop,paste

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

Image.new(mode,size,color=0) --創建一個新對象,mode為單通道時,color為一個整數或浮點數;

多通道時,color為元組,元素數目對應通道數。

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

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

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

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

im.size--(200,300)

im.format --如'JPEG'

im.info 、im.palette

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

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

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

im.crop(box) --復制一部分圖像,box為一個元組,定義矩形的左上角和右下角。改變原圖像,可能會也可能不會影響crop的部分,

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

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

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

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

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

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

im.histogram() --返回直方圖統計數據

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

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

im.resize(size,resample=0) --調整大小,resample有四個選項,默認為第一個,第四個質量更高一些

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) --逆時針旋轉某一度數,resample有三個選項,默認第一個;expand默認為0,

保持旋轉后圖像和原來大小相同,超出邊界的部分舍掉,設置為True則擴展圖像大小以保證能全部顯示原圖像的內容

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

im.show(title=None) --調試時常用來顯示圖像

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

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

Image.FLIP_TOP_BOTTOM 上下顛倒

Image.ROTATE_90 逆時針旋轉90度

Image.ROTATE_180 逆時針旋轉180度

Image.ROTATE_270 逆時針旋轉 270度

Image.TRANSPOSE 上下左右顛倒

im.load() --分配圖像存儲空間,載入像素數據,一般open得到的對象會自動調用,無需手動調用

因為此方法會使圖像對象和原文件斷絕聯系,故在im.crop()后可用于切斷復制部分與原圖像的聯系

二、ImgaeFont Module (from PIL import ImageFont)

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

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

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

當前目錄沒有該文件則去windows的fonts目錄下查找

index決定加載哪個font face(一個字體文件可能會包含多個相關的字體)

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

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

3.ImageColor Module (from PIL import ImageColor)

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

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

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

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

(1)十六進制形式,#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) --返回一個繪圖對象,使以后的繪圖操作發生在im上

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

注:無特殊說明,參數box類型默認為[x,y,x,y]或[(x,y),(x,y)];xy參數類型默認為[x,y,x,y,x,y...]或者[(x,y),(x,y),(x,y),...]

draw.arc(box,start,end,fill=None) --start定義起始角度(0代表3點鐘方向),end定義終止角度,都為degrees,正方向為順時針。

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

點,fill為填充顏色,outline為描邊顏色

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

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

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

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

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

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

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

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲精品免费在线观看视频 | 日本美女一区二区三区 | 欧美刺激性大交 | 亚洲一区欧美二区 | av男人在线| 性高潮影院 | 色女仆影院 | 婷婷色激情| 97无码精品人妻 | 久久久免费观看 | 99er久久 | 最新天堂中文在线 | 日韩欧美高清dvd碟片 | 国产精品女教师 | 免费精品久久 | 久久特黄视频 | 亚洲成人免费视频 | 国产精品成人一区二区网站软件 | 欧美高清一区二区 | 狂野欧美性猛交xxxx | 国产欧美精品区一区二区三区 | 欧美一级艳片视频免费观看 | 国产精品天美传媒入口 | 伊人久久国产 | 亚洲大尺度网站 | 婷婷婷色 | 久久精品国产亚洲av麻豆图片 | 美女高潮黄又色高清视频免费 | 日本一二三区视频 | 久久婷婷国产麻豆91天堂 | 欧美三级免费 | www.白白色 | 午夜毛片 | 午夜av网站 | 美女又爽又黄免费 | 人妻夜夜爽天天爽 | 狼人av在线 | 国产精品国产三级国产aⅴ原创 | 色综合久久天天综合网 | 日韩久久久久 | 草莓视频在线观看入口w | 久久亚洲美女 | 蜜臀99久久精品久久久久久软件 | 日本三级456 | 一区二区看片 | 综合久久国产 | 99亚洲欲妇| 先锋资源一区 | 91日日夜夜 | 欧美自偷自拍 | 免费精品无码AV片在线观看黄 | 亚洲图片欧美在线 | 可以免费看av的网址 | 亲嘴脱内衣内裤 | 在线精品一区二区三区 | 日韩影院一区二区 | 亚洲三级网 | 五月天三级 | 国产传媒视频在线观看 | 美国性生活大片 | 欧美乱大交 | 亚洲av永久无码精品放毛片 | 激情内射亚洲一区二区三区爱妻 | 在线观看视频中文字幕 | 丰满岳妇伦在线播放 | 黄色片视频免费在线观看 | 免费视频中文字幕 | wwwxx在线观看 | 青青草在线观看视频 | 看全黄大色黄大片 | 夜夜天堂 | 99爱视频| 国语播放老妇呻吟对白 | 国精产品一区一区三区mba下载 | 国内成人av| 亚洲乱码一区二区三区 | 伊人热久久 | 一级黄色片看看 | 亚洲视频欧洲视频 | 久久中文一区 | 人妻内射一区二区在线视频 | 九七人人爽| 日本一区视频在线 | 午夜日韩欧美 | 日韩av视屏 | 黄色一级视频在线观看 | av在哪里看 | 成人av18 | 图书馆的女友在线观看 | 在线精品福利 | 亚洲免费黄网 | 欧美精品日韩在线观看 | 久久久久久久久电影 | 天海翼视频在线观看 | 国产原创视频在线 | 91精品久久人妻一区二区夜夜夜 | 最近最好的2019中文 | 色视频一区 | 国产精品久免费的黄网站 |