最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python圖像處理庫PIL的ImageDraw模塊介紹詳解

 更新時(shí)間:2020年02月26日 10:01:42   作者:icamera0  
這篇文章主要介紹了Python圖像處理庫PIL的ImageDraw模塊介紹詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

ImageDraw模塊提供了圖像對象的簡單2D繪制。用戶可以使用這個模塊創(chuàng)建新的圖像,注釋或潤飾已存在圖像,為web應(yīng)用實(shí)時(shí)產(chǎn)生各種圖形。

PIL中一個更高級繪圖庫見The aggdraw Module

一、ImageDraw模塊的概念

1、  Coordinates

繪圖接口使用和PIL一樣的坐標(biāo)系統(tǒng),即(0,0)為左上角。

2、  Colours

為了指定顏色,用戶可以使用數(shù)字或者元組,對應(yīng)用戶使用函數(shù)Image.new或者Image.putpixel。對于模式為“1”,“L”和“I”的圖像,使用整數(shù)。對于“RGB”圖像,使用整數(shù)組成的3元組。對于“F”圖像,使用整數(shù)或者浮點(diǎn)數(shù)。

對于調(diào)色板圖像(模式為“P”),使用整數(shù)作為顏色索引。在1.1.4及其以后,用戶也可以使用RGB 3元組或者顏色名稱。繪制層將自動分配顏色索引,只要用戶不繪制多于256種顏色。

3、  Colours Names

在PIL 1.1.4及其以后的版本,用戶繪制“RGB”圖像時(shí),可以使用字符串常量。PIL支持如下字符串格式:

A、 十六進(jìn)制顏色說明符,定義為“#rgb”或者“#rrggbb”。例如,“#ff0000”表示純紅色。

B、 RGB函數(shù),定義為“rgb(red, green, blue)”,變量red、green、blue的取值為[0,255]之間的整數(shù)。另外,顏色值也可以為[0%,100%]之間的三個百分比。例如,“rgb(255, 0, 0)”和“rgb(100%, 0%, 0%)”都表示純紅色。

C、 HSL(Hue-Saturation-Lightness)函數(shù),定義為“hsl(hue,saturation%, lightness%)”,變量hue為[0,360]一個角度表示顏色(red=0, green=120, blue=240),變量saturation為[0%,100%]之間的一個值(gray=0%,full color=100%),變量lightness為[0%,100%]之間的一個值(black=0%, normal=50%, white=100%)。例如,“hsl(0,100%, 50%)”為純紅色。

D、 通用HTML顏色名稱,ImageDraw模塊提供了140個標(biāo)準(zhǔn)顏色名稱,Xwindow系統(tǒng)和大多數(shù)web瀏覽器都支持這些顏色。顏色名稱對大小寫不敏感。例如,“red”和“Red”都表示純紅色。

4、  Fonts

PIL可以使用bitmap字體或者OpenType/TrueType字體。

Bitmap字體被存儲在PIL自己的格式中,它一般包括兩個文件,一個叫.pil,它包含字體的矩陣,另一個通常叫做.pbm,它包含柵格數(shù)據(jù)。

在ImageFont模塊中,使用函數(shù)load()加載一個bitmap字體。

在ImageFont模塊中,使用函數(shù)truetype()加載一個OpenType/TrueType字體。注意:這個函數(shù)依賴于第三方庫,而且并不是在所有的PIL版本中都有效。

(IronPIL)加載內(nèi)置的字體,使用ImageFont模塊的Font()結(jié)構(gòu)函數(shù)即可。

二、ImageDraw模塊的函數(shù)

1、  Draw

定義:Draw(image) ⇒ Draw instance

含義:創(chuàng)建一個可以在給定圖像上繪圖的對象。

(IronPIL)用戶可以使用ImageWin模塊的HWND或者HDC對象來代替圖像。這個允許用戶直接在屏幕上繪圖。

注意:圖像內(nèi)容將會被修改。

例子:

>>> fromPIL import Image, ImageDraw

>>> im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>> draw =ImageDraw.Draw(im01)

>>> draw.line((0,0) +im01.size, fill=128)

>>> draw.line((0,im01.size[1], im.size[0], 0), fill = 128)

>>> im01.show()

>>> del draw

在圖像01上繪制了兩條灰色的對角線,如下圖:

                            

三、ImageDraw模塊的方法

1、  Arc

定義:draw.arc(xy, start, end, options)

含義:在給定的區(qū)域內(nèi),在開始和結(jié)束角度之間繪制一條弧(圓的一部分)。

變量options中fill設(shè)置弧的顏色。

例子:

>>> from PIL import Image,ImageDraw
>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")
>>> draw =ImageDraw.Draw(im01)
>>> draw.arc((0,0,200,200),0, 90, fill = (255,0,0))
>>>draw.arc((300,300,500,500), 0, -90, fill = (0,255,0))
>>> draw.arc((200,200,300,300),-90, 0, fill = (0,0,255))
>>> im01.show()
>>> del draw

注意:變量xy是需要設(shè)置一個區(qū)域,此處使用4元組,包含了區(qū)域的左上角和右下角兩個點(diǎn)的坐標(biāo)。此PIL版本中,變量options不能使用outline,會報(bào)錯:“TypeError: arc() got an unexpected keyword argument 'outline'”;所以此處應(yīng)該使用fill。

在圖像01上(0,0,200,200)區(qū)域使用紅色繪制了90度的弧,(300,300,500,500)區(qū)域使用綠色繪制了270度的弧,(200,200,300,300)區(qū)域使用藍(lán)色繪制了90度的弧。這些弧都是按照順時(shí)針方向繪制的。變量start/end的0度為水平向右,沿著順時(shí)針方向依次增加。繪制后的圖像01如下圖:

2、  Bitmap

定義:draw.bitmap(xy, bitmap, options)

含義:在給定的區(qū)域里繪制變量bitmap所對應(yīng)的位圖,非零部分使用變量options中fill的值來填充。變量bitmap位圖應(yīng)該是一個有效的透明模板(模式為“1”)或者蒙版(模式為“L”或者“RGBA”)。

這個方法與Image.paste(xy, color, bitmap)有相同的功能。

例子:

>>> from PIL import Image,ImageDraw

>>> im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>> im02 =Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")

>>> im =im02.resize(300,200)>>> im.size

(300, 200)

>>> r,g,b =im.split()

>>> draw =ImageDraw.Draw(im01)

>>>draw.bitmap((0,0), r, fill = (255,0,0))

>>>draw.bitmap((300,200), g, fill = (0,255,0))

>>>draw.bitmap((600,400), b, fill = (0,0,255))

>>> im01.show()

變量xy是變量bitmap對應(yīng)位圖起始的坐標(biāo)值,而不是一個區(qū)域。

圖像im01如下:

3、  Chord

定義:draw.chord(xy,start, end, options)

含義:和方法arc()一樣,但是使用直線連接起始點(diǎn)。

變量options的outline給定弦輪廓的顏色。Fill給定弦內(nèi)部的顏色。

例子:

>>>from PIL import Image, ImageDraw
>>> im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")
>>> draw =ImageDraw.Draw(im01)
>>> draw.chord((0,0,200,200),0, 90, fill = (255,0,0))
>>> draw.chord((300,300,500,500), 0, -90, fill = (0,255,0))
>>> draw.chord((200,200,300,300), -90, 0, fill = (0,0,255))
>>> im01.show()

圖像im01如下:

4、  Ellipse

定義:draw.ellipse(xy,options)

含義:在給定的區(qū)域繪制一個橢圓形。

變量options的outline給定橢圓形輪廓的顏色。Fill給定橢圓形內(nèi)部的顏色。

例子:

>>>from PIL import Image, ImageDraw
>>> im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")
>>> draw =ImageDraw.Draw(im01)
>>> draw.ellipse((0,0, 200, 200), fill = (255, 0, 0))
>>> draw.ellipse((200,200,400,300),fill = (0, 255, 0))
>>>draw.ellipse((400,400,800,600), fill = (0, 0, 255))
>>> im01.show()

圖像im01如下:

5、  Line

定義:draw.line(xy,options)

含義:在變量xy列表所表示的坐標(biāo)之間畫線。

坐標(biāo)列表可以是任何包含2元組[(x,y),…]或者數(shù)字[x,y,…]的序列對象。它至少包括兩個坐標(biāo)。

變量options的fill給定線的顏色。

(New in 1.1.5)變量options的width給定線的寬度。注意線連接不是很好,所以多段線段連接不好看。

例子:

>>>from PIL import Image, ImageDraw

>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>>draw = ImageDraw.Draw(im01)

>>>draw.line([(0,0),(100,300),(200,500)], fill = (255,0,0), width = 5)

>>>draw.line([50,10,100,200,400,300], fill = (0,255,0), width = 10)

>>>im01.show()

圖像im01如下:

6、  Pieslice

定義:draw.pieslice(xy,start, end, options)

含義:和方法arc()一樣,但是在指定區(qū)域內(nèi)結(jié)束點(diǎn)和中心點(diǎn)之間繪制直線。

變量options的fill給定pieslice內(nèi)部的顏色。

例子:

>>>from PIL import Image, ImageDraw

>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>>draw = ImageDraw.Draw(im01)

>>>draw.pieslice((0,0,100,200), 0, 90, fill = (255,0,0))

>>>draw.pieslice((100,200,300,400), 0, -90, fill = (0,255,0))

>>> im01.show()

圖像im01如下:

7、  Point

定義:draw.point(xy,options)

含義:在給定的坐標(biāo)點(diǎn)上畫一些點(diǎn)。

坐標(biāo)列表是包含2元組[(x,y),…]或者數(shù)字[x,y,…]的任何序列對象。

變量options的fill給定點(diǎn)的顏色。

例子:

>>>from PIL import Image, ImageDraw

>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>>draw = ImageDraw.Draw(im01)

>>> draw.point([(0,0),(100,150), (110, 50)], fill = (255, 0, 0))

>>> draw.point([0,10,100,110, 210, 150], fill = (0, 255, 0))

>>>im01.show()

圖像im01上在對應(yīng)的坐標(biāo)點(diǎn)上會有紅色/綠色的點(diǎn),每個點(diǎn)只占一個像素點(diǎn)。圖像如下:

8、  Polygon

定義:draw.polygon(xy,options)

含義:繪制一個多邊形。

多邊形輪廓由給定坐標(biāo)之間的直線組成,在最后一個坐標(biāo)和第一個坐標(biāo)間增加了一條直線,形成多邊形。

坐標(biāo)列表是包含2元組[(x,y),…]或者數(shù)字[x,y,…]的任何序列對象。它最少包括3個坐標(biāo)值。

變量options的fill給定多邊形內(nèi)部的顏色。

例子:

>>>from PIL import Image, ImageDraw

>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>>draw = ImageDraw.Draw(im01)

>>> draw.polygon([(0,0),(100,150), (210, 350)], fill = (255, 0, 0))

>>> draw.polygon([300,300,100,400, 400, 400], fill = (0, 255, 0))

>>>im01.show()

圖像01如下:

9、  Rectangle

定義:draw.rectangle(box,options)

含義:繪制一個長邊形。

變量box是包含2元組[(x,y),…]或者數(shù)字[x,y,…]的任何序列對象。它應(yīng)該包括2個坐標(biāo)值。

注意:當(dāng)長方形沒有沒有被填充時(shí),第二個坐標(biāo)對定義了一個長方形外面的點(diǎn)。

變量options的fill給定長邊形內(nèi)部的顏色。

例子:

>>>from PIL import Image, ImageDraw

>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>>draw = ImageDraw.Draw(im01)

>>>draw.rectangle((0,0,100,200), fill = (255,0,0))

>>> draw.rectangle([100,200,300,500],fill = (0,255,0))

>>>draw.rectangle([(300,500),(600,700)], fill = (0,0,255))

>>>im01.show()

圖像01如下:

10、Text

定義:draw.text(position,string, options)

含義:在給定的位置繪制一個字符創(chuàng)。變量position給出了文本的左上角的位置。

變量option的font用于指定所用字體。它應(yīng)該是類ImangFont的一個實(shí)例,使用ImageFont模塊的load()方法從文件中加載的。

變量options的fill給定文本的顏色。

例子:

>>>from PIL import Image, ImageDraw

>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>>draw = ImageDraw.Draw(im01)

>>> draw.text((0,0),"Hello", fill = (255,0,0))

>>>im01.show()

在圖像01的(0,0)位置繪制出字符串“Hello”。

11、 Textsize

定義:draw.textsize(string,options)⇒ (width, height)

含義:返回給定字符串的大小,以像素為單位。

變量option的font用于指定所用字體。它應(yīng)該是類ImangFont的一個實(shí)例,使用ImageFont模塊的load()方法從文件中加載的。

例子:

>>>from PIL import Image, ImageDraw

>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>>draw = ImageDraw.Draw(im01)

>>>draw.textsize("Hello")

(30, 11)

>>>draw.textsize("Hello, the world")

(96, 11)

>>>im01.show()

四、ImageDraw模塊的option變量

Option變量有三個屬性,分別為outline,fill和font。Outline和fill都可為整數(shù)或者元組;font為ImageFont類的實(shí)例。

這幾個屬性在前面方法介紹中都有用到,這里不作解釋。

五、ImageDraw模塊的兼容性

類Draw包括的一個構(gòu)造函數(shù)和一些方法提供向后兼容。為了使這些函數(shù)正常工作,用戶應(yīng)該使用options,或者使用這些方法。但不能混合舊的和新的調(diào)用習(xí)慣。

(IronPIL)IronPIL不支持這些有兼容性的方法。

1、  ImageDraw

定義:ImageDraw(image)⇒ Draw instance

含義:(不贊成)生成Draw的實(shí)例。新代碼中不要用這個函數(shù)。

2、  Setink

定義:draw.setink(ink)

含義:(不贊成)為后續(xù)繪制和fill屬性設(shè)置顏色。

3、   Setfill

定義:draw.setfill(mode)

含義:(不贊成)設(shè)置fill屬性。

如果變量mode為0,后續(xù)繪制的形狀(像多邊形和長方形)都是輪廓。如果mode為1,則它們會被填充。

4、  Setfill

定義:draw.setfont(font)

含義:(不贊成)為text()方法設(shè)置默認(rèn)的字體。

變量font是ImageFont類的實(shí)例,使用ImageFont模塊的load()方法從文件中加載的。

五、ImageDraw示例

首先創(chuàng)建一個圖片或者打開一個圖片

blank = Image.new("RGB",[1024,768],"white")

創(chuàng)建一個可用來Image操作的對象(必須)

drawObj = ImageDraw.Draw(blank)

直線

# 創(chuàng)建一個正方形。 [x1,x2,y1,y2]或者[(x1,x2),(y1,y2)] fill代表的為顏色
drawObj.line([100,100,100,600],fill='red')
drawObj.line([100,100,600,100],fill='red')
drawObj.line([600,100,600,600],'black')
drawObj.line([100,600,600,600],'red')
# blank.save('white.jpg','jpeg')

弧線

# 弧形 [x1,x2,y1,y2] 弧度 顏色
drawObj.arc([100,100,600,600],0,360,fill='black')
drawObj.arc([200,100,500,600],0,360,fill='red')
blank.save('black.jpg','jpeg')

# 畫圓 [x1,x2,y1,y2] outline邊框顏色 fill填充顏色
drawObj.ellipse([100,100,600,600],outline='black',fill='white')
blank.save('black.jpg','jpeg')

半圓

# 畫半圓 [x1,x2,y1,y2] 弧度 outline弦線顏色 fill填充顏色
drawObj.chord([100,100,600,600],0,360,outline=125)
drawObj.chord([100,100,600,600],0,90,outline=158)
drawObj.chord([100,100,600,600],90,180,outline=99,fill='red')
blank.save('black.jpg','jpeg')

扇形

# 扇形 [x1,x2,y1,y2] 弧度 outline弦線顏色 fill填充顏色
drawObj.pieslice([100,100,600,600],180,210,outline=255)
drawObj.pieslice([100,100,600,600],30,80,fill=255)
blank.save('black.jpg','jpeg')

多邊形

# 多邊形
drawObj.polygon([10,23,45,6,77,87],outline='red')
drawObj.polygon([10,20,30,40,50,90,70,80,90,100],fill='red')
blank.save('black.jpg','jpeg')

矩形

# 矩形
drawObj.rectangle((200,200,500,500),outline = "red")
drawObj.rectangle((250,300,450,400),fill = 128)
blank.save('black.jpg','jpeg')

到此這篇關(guān)于Python圖像處理庫PIL的ImageDraw模塊介紹詳解的文章就介紹到這了,更多相關(guān)PIL ImageDraw模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

兴宁市| 达拉特旗| 邵东县| 洪洞县| 娄底市| 高碑店市| 泸州市| 略阳县| 铁岭县| 安丘市| 上蔡县| 垦利县| 虎林市| 菏泽市| 馆陶县| 隆安县| 洞口县| 泰来县| 奈曼旗| 滦平县| 海丰县| 琼结县| 德庆县| 松原市| 宜章县| 天长市| 鄂托克旗| 康定县| 白河县| 平遥县| 延寿县| 岑巩县| 富顺县| 扎囊县| 华阴市| 大余县| 阳春市| 荆门市| 眉山市| 海宁市| 连云港市|