日韩性视频-久久久蜜桃-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模块的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 99免费在线观看视频 | 四季av一区二区夜夜嗨 | 午夜精品久久久久久久第一页按摩 | 一级片大片| 黄色av大全 | 免费草逼视频 | 日韩精品福利视频 | 无码国精品一区二区免费蜜桃 | 日本一本在线视频 | 国产一区二区三区色淫影院 | 国产一区二区三区在线播放无 | 国产一区二区三区四区精 | 精品在线免费视频 | av网站免费在线 | 亚洲av无码乱码国产精品 | 国产h片在线观看 | 天天色天天操天天 | 青青草草视频 | 欧美成人一区二免费视频软件 | 最近中文字幕mv免费高清在线 | 久久影院一区 | 天天天干 | 欧美一区影院 | 人人爽久久涩噜噜噜网站 | 久久久久成人片免费观看蜜芽 | 欧美福利视频导航 | 中文字幕不卡 | 亚洲国产网址 | 欧美人xxx| 99久久精品国产一区色 | 网站久久 | 亚州av一区二区 | 日本高清视频在线观看 | 欧美又粗又深又猛又爽啪啪九色 | 韩国美女毛片 | 久久久福利 | 日韩视频一二三区 | 成人在线欧美 | 亚洲黄色一区二区三区 | 国产麻豆一区 | 裸体黄色片| 色资源在线| 亚洲成人中文字幕在线 | 2018自拍偷拍| 黑人巨茎大战欧美白妇 | 人人干狠狠干 | 久久久欧洲 | 永久久久久久 | 午夜免费小视频 | 色a视频 | 五月婷婷激情在线 | 国产精品免费一区二区三区四区 | 成人18视频 | 中文字幕亚洲日本 | 国产视频91在线 | 女生扒开腿让男生操 | 神马电影久久 | 欧美日韩一区二区在线观看视频 | 九九热视频在线观看 | 亚洲一区二区在线电影 | 日韩一区二区三区精品视频 | 四虎色| 日本黄色xxxxx | 果冻传媒18禁免费视频 | 免费大片黄在线观看 | 国产一区二区三区视频在线观看 | 亚洲天堂欧美 | 国产黄色在线观看 | 极品国产白皙 | 无码人妻aⅴ一区二区三区玉蒲团 | 久热中文字幕 | 欧美色图俺去了 | 国产区第一页 | 久久精品丝袜 | 最新av在线网站 | 亚洲精品综合久久 | 影音先锋黄色网址 | 成年人免费在线观看视频网站 | 国产精品亚洲AV色欲三区不卡 | 伊人久久久久久久久久久久 | 欧洲日韩一区二区三区 | 女futa攻玩遍整个后宫 | 91九色porny视频| 美女mm131爽爽爽免费动视频 | 亚洲在线网站 | 色偷偷av男人的天堂 | 京香julia在线观看 | 99精品视频在线免费观看 | 99福利网 | 在线你懂的| 欧美成人高清视频 | 国产三级日本三级在线播放 | 亚洲激情五月婷婷 | 精品在线观看视频 | 一级特毛片 | 丰满岳乱妇一区二区三区 | www.久热 | 精品播放 | 国产视频一二三 |