今天就跟大家聊聊有關(guān)如何在Python中使用ImageDraw模塊,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
目前創(chuàng)新互聯(lián)建站已為千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站托管維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、光山網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。一、ImageDraw模塊的概念
1、 Coordinates
繪圖接口使用和PIL一樣的坐標(biāo)系統(tǒng),即(0,0)為左上角。
2、 Colours
為了指定顏色,用戶(hù)可以使用數(shù)字或者元組,對(duì)應(yīng)用戶(hù)使用函數(shù)Image.new或者Image.putpixel。對(duì)于模式為“1”,“L”和“I”的圖像,使用整數(shù)。對(duì)于“RGB”圖像,使用整數(shù)組成的3元組。對(duì)于“F”圖像,使用整數(shù)或者浮點(diǎn)數(shù)。
對(duì)于調(diào)色板圖像(模式為“P”),使用整數(shù)作為顏色索引。在1.1.4及其以后,用戶(hù)也可以使用RGB 3元組或者顏色名稱(chēng)。繪制層將自動(dòng)分配顏色索引,只要用戶(hù)不繪制多于256種顏色。
3、 Colours Names
在PIL 1.1.4及其以后的版本,用戶(hù)繪制“RGB”圖像時(shí),可以使用字符串常量。PIL支持如下字符串格式:
A、 十六進(jìn)制顏色說(shuō)明符,定義為“#rgb”或者“#rrggbb”。例如,“#ff0000”表示純紅色。
B、 RGB函數(shù),定義為“rgb(red, green, blue)”,變量red、green、blue的取值為[0,255]之間的整數(shù)。另外,顏色值也可以為[0%,100%]之間的三個(gè)百分比。例如,“rgb(255, 0, 0)”和“rgb(100%, 0%, 0%)”都表示純紅色。
C、 HSL(Hue-Saturation-Lightness)函數(shù),定義為“hsl(hue,saturation%, lightness%)”,變量hue為[0,360]一個(gè)角度表示顏色(red=0, green=120, blue=240),變量saturation為[0%,100%]之間的一個(gè)值(gray=0%,full color=100%),變量lightness為[0%,100%]之間的一個(gè)值(black=0%, normal=50%, white=100%)。例如,“hsl(0,100%, 50%)”為純紅色。
D、 通用HTML顏色名稱(chēng),ImageDraw模塊提供了140個(gè)標(biāo)準(zhǔn)顏色名稱(chēng),Xwindow系統(tǒng)和大多數(shù)web瀏覽器都支持這些顏色。顏色名稱(chēng)對(duì)大小寫(xiě)不敏感。例如,“red”和“Red”都表示純紅色。
4、 Fonts
PIL可以使用bitmap字體或者OpenType/TrueType字體。
Bitmap字體被存儲(chǔ)在PIL自己的格式中,它一般包括兩個(gè)文件,一個(gè)叫.pil,它包含字體的矩陣,另一個(gè)通常叫做.pbm,它包含柵格數(shù)據(jù)。
在ImageFont模塊中,使用函數(shù)load()加載一個(gè)bitmap字體。
在ImageFont模塊中,使用函數(shù)truetype()加載一個(gè)OpenType/TrueType字體。注意:這個(gè)函數(shù)依賴(lài)于第三方庫(kù),而且并不是在所有的PIL版本中都有效。
(IronPIL)加載內(nèi)置的字體,使用ImageFont模塊的Font()結(jié)構(gòu)函數(shù)即可。
二、ImageDraw模塊的函數(shù)
1、 Draw
定義:Draw(image) ? Draw instance
含義:創(chuàng)建一個(gè)可以在給定圖像上繪圖的對(duì)象。
(IronPIL)用戶(hù)可以使用ImageWin模塊的HWND或者HDC對(duì)象來(lái)代替圖像。這個(gè)允許用戶(hù)直接在屏幕上繪圖。
注意:圖像內(nèi)容將會(huì)被修改。
例子:
>>> 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上繪制了兩條灰色的對(duì)角線,如下圖:
三、ImageDraw模塊的方法
1、 Arc
定義:draw.arc(xy, start, end, options)
含義:在給定的區(qū)域內(nèi),在開(kāi)始和結(jié)束角度之間繪制一條?。▓A的一部分)。
變量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è)置一個(gè)區(qū)域,此處使用4元組,包含了區(qū)域的左上角和右下角兩個(gè)點(diǎn)的坐標(biāo)。此PIL版本中,變量options不能使用outline,會(huì)報(bào)錯(cuò):“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í)針?lè)较蚶L制的。變量start/end的0度為水平向右,沿著順時(shí)針?lè)较蛞来卧黾印@L制后的圖像01如下圖:
2、 Bitmap
定義:draw.bitmap(xy, bitmap, options)
含義:在給定的區(qū)域里繪制變量bitmap所對(duì)應(yīng)的位圖,非零部分使用變量options中fill的值來(lái)填充。變量bitmap位圖應(yīng)該是一個(gè)有效的透明模板(模式為“1”)或者蒙版(模式為“L”或者“RGBA”)。
這個(gè)方法與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對(duì)應(yīng)位圖起始的坐標(biāo)值,而不是一個(gè)區(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ū)域繪制一個(gè)橢圓形。
變量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)之間畫(huà)線。
坐標(biāo)列表可以是任何包含2元組[(x,y),…]或者數(shù)字[x,y,…]的序列對(duì)象。它至少包括兩個(gè)坐標(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)上畫(huà)一些點(diǎn)。
坐標(biāo)列表是包含2元組[(x,y),…]或者數(shù)字[x,y,…]的任何序列對(duì)象。
變量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上在對(duì)應(yīng)的坐標(biāo)點(diǎn)上會(huì)有紅色/綠色的點(diǎn),每個(gè)點(diǎn)只占一個(gè)像素點(diǎn)。圖像如下:
8、 Polygon
定義:draw.polygon(xy,options)
含義:繪制一個(gè)多邊形。
多邊形輪廓由給定坐標(biāo)之間的直線組成,在最后一個(gè)坐標(biāo)和第一個(gè)坐標(biāo)間增加了一條直線,形成多邊形。
坐標(biāo)列表是包含2元組[(x,y),…]或者數(shù)字[x,y,…]的任何序列對(duì)象。它最少包括3個(gè)坐標(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)
含義:繪制一個(gè)長(zhǎng)邊形。
變量box是包含2元組[(x,y),…]或者數(shù)字[x,y,…]的任何序列對(duì)象。它應(yīng)該包括2個(gè)坐標(biāo)值。
注意:當(dāng)長(zhǎng)方形沒(méi)有沒(méi)有被填充時(shí),第二個(gè)坐標(biāo)對(duì)定義了一個(gè)長(zhǎng)方形外面的點(diǎn)。
變量options的fill給定長(zhǎng)邊形內(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)
含義:在給定的位置繪制一個(gè)字符創(chuàng)。變量position給出了文本的左上角的位置。
變量option的font用于指定所用字體。它應(yīng)該是類(lèi)ImangFont的一個(gè)實(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)該是類(lèi)ImangFont的一個(gè)實(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變量有三個(gè)屬性,分別為outline,fill和font。Outline和fill都可為整數(shù)或者元組;font為ImageFont類(lèi)的實(shí)例。
這幾個(gè)屬性在前面方法介紹中都有用到,這里不作解釋。
五、ImageDraw模塊的兼容性
類(lèi)Draw包括的一個(gè)構(gòu)造函數(shù)和一些方法提供向后兼容。為了使這些函數(shù)正常工作,用戶(hù)應(yīng)該使用options,或者使用這些方法。但不能混合舊的和新的調(diào)用習(xí)慣。
(IronPIL)IronPIL不支持這些有兼容性的方法。
1、 ImageDraw
定義:ImageDraw(image)? Draw instance
含義:(不贊成)生成Draw的實(shí)例。新代碼中不要用這個(gè)函數(shù)。
2、 Setink
定義:draw.setink(ink)
含義:(不贊成)為后續(xù)繪制和fill屬性設(shè)置顏色。
3、 Setfill
定義:draw.setfill(mode)
含義:(不贊成)設(shè)置fill屬性。
如果變量mode為0,后續(xù)繪制的形狀(像多邊形和長(zhǎng)方形)都是輪廓。如果mode為1,則它們會(huì)被填充。
4、 Setfill
定義:draw.setfont(font)
含義:(不贊成)為text()方法設(shè)置默認(rèn)的字體。
變量font是ImageFont類(lèi)的實(shí)例,使用ImageFont模塊的load()方法從文件中加載的。
五、ImageDraw示例
首先創(chuàng)建一個(gè)圖片或者打開(kāi)一個(gè)圖片
blank = Image.new("RGB",[1024,768],"white")
創(chuàng)建一個(gè)可用來(lái)Image操作的對(duì)象(必須)
drawObj = ImageDraw.Draw(blank)
直線
# 創(chuàng)建一個(gè)正方形。 [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')
圓
# 畫(huà)圓 [x1,x2,y1,y2] outline邊框顏色 fill填充顏色 drawObj.ellipse([100,100,600,600],outline='black',fill='white') blank.save('black.jpg','jpeg')
半圓
# 畫(huà)半圓 [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')
看完上述內(nèi)容,你們對(duì)如何在Python中使用ImageDraw模塊有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道,感謝大家的支持。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。
文章名稱(chēng):如何在Python中使用ImageDraw模塊-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://jinyejixie.com/article12/csdjdc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開(kāi)發(fā)、品牌網(wǎng)站建設(shè)、電子商務(wù)、網(wǎng)站排名、商城網(wǎng)站、軟件開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)