python手記(四):pillow(四) ImageDraw模組 圖片繪製
人生不易且無趣,一起來找點樂子吧。歡迎評論,和文章無關的也可以。
這次說下ImageDraw module,其實從名字上就可以看出來,這個模組的功能是什麼。就是在圖片上繪製一些東西,比如文字,簡單圖形啊什麼的。
下面我們就來看看模組下的幾個方法的運用。
這次換張圖片:
首先,如果我們想要對圖片進行操作,我們先要得到他的物件,然後再呼叫方法。Draw方法,返回ImageDraw物件。
ImageDraw.Draw():
方法要吞掉一個Image物件,返回ImageDraw物件
im = Image.open('5.jpg') draw = ImageDraw.Draw(im)#mode 預設為im.mode
類似於這個樣子,draw有兩個引數,除此外,還有mode,預設情況和im.mode相同,如果想轉變,改就是了。
draw就是我們獲得的物件。就可以呼叫下面的方法進行處理了。
line(xy, fill):
望文生義,劃線。xy是座標序列,列表,元祖等都可以,只要是序列型別皆可。而且數量不限。比如【0,0,10,20,30,50,70,100】,他就會分別從(0,0),(10,20),(30,50),(70,100)間劃線。
fill引數是線的顏色。
def line(): im = Image.open('5.jpg') draw = ImageDraw.Draw(im)#mode 預設為im.mode draw.line((0, 0)+im.size, fill=120) draw.line((0, im.size[1], im.size[0], 0), fill=120) im.save('line.jpg') im.close()
來看這個,引數是個tuple,第一條線是從圖片的左上角到右下角,第二條線是從左下,到右上。所以執行結果也就是在圖片上打個大花叉。
text(xy, text, fill, font, spacing, direction):
在圖片上繪製文字,這種功能隨便的手機編輯一下就是了哈,這裡我們不討論他的功能實用性。只是單純的學習。
xy是文字左上角起始位置,text是待編輯文字,fill文字顏色。font是個ImageFont的例項,這個我們後面去講,spacing是字型間距,direction引數是排列的方向,引數值有rtl,ttb兩種。不好記?很好記,right to left, top to button。開頭縮寫而已。(整的那麼高大上!!!)
我們再說下這個:
arc(xy,start,end,fill):
這個方法是畫圓,xy需要給個box。比如在畫素點(0,0)和(100,100)之間畫圓。start是初始角度,0度為正右方。end當然就是結束角度,不過注意,畫圓方向為順時針,fill同上。來看個例子:
def text():
base = Image.open('5.jpg').convert('RGBA')
d = ImageDraw.Draw(base)
d.text((10, 10), 'Hello\nworld', fill=(255, 255, 255, 0))#font是個imagefont例項 spacing字型間距 direction rtl ttb
d.text((10, 60), 'World', fill=(255, 255, 255, 255))
d.arc([60,60,100,100],0,270,fill='red')#box, start angle, end angle, fill color
base.save('txt.png')
base.close()
寫了個hello word,畫了三分之一圓。
chord(xy, start, end, fill, outline):
這個方法和arc功能相同,outline是劃線顏色,而fill是填充顏色。與arc的區別是,畫完圖之後,會將末位點和起始點連線起來。
def chord():#和絃
base = Image.open('5.jpg').convert('RGBA')
d = ImageDraw.Draw(base)
d.chord([60,60,120,100],0,270,fill='blue', outline='yellow')
base.save('chrod.png')
base.close()
至於chord的含義,我不太懂,有和絃、基調的意思。不知具體想要表達的意思,估計是連結吧,藕斷絲連?(什麼鬼!!!)
無妨:
pieslice():
引數和功能都和chord一樣,區別在於最後將末位點與起始點連線到中心:
ellipse()
很簡單,就是畫橢圓嘛。引數和畫圓的都一樣,而且通過arc也可以實現相同的功能,直接看下效果吧。
rectangle(xy,fill,outline)
功能明確,引數清晰是吧。都不需要過腦子的(也可能是根本就沒有),xy給出rectangle的左上和右下的畫素點座標,fill填充,outline是pen color。
def rectangle():
base = Image.open('5.jpg').convert('RGBA')
d = ImageDraw.Draw(base)
d.rectangle([60,60,120,80],fill='red',outline='white')
base.save('rectangle.png')
base.close()
polygon
(xy, fill, outline)
polygon,多邊形。xy又是個畫素點座標的序列。我們隨便給幾個點:
def polygon():
base = Image.open('5.jpg').convert('RGBA')
d = ImageDraw.Draw(base)
d.polygon([60,60,100,60,130,80,80,150],fill='white',)
base.save('polygon.png')
base.close()
point
(xy, fill)
這個有趣,畫點點。引數沒什麼區別。直接看看例子吧:
def point():
base = Image.open('5.jpg').convert('RGBA')
d = ImageDraw.Draw(base)
d.point([60,60,62,60,64,60,66,60,68,60,70,60],fill='white')
base.save('point.png')
base.close()
橫著一排點了幾個點,fill是點點顏色:
好小,手動指明。哈哈.......
ok,這個模組差不多就這樣吧,還有幾個方法的開發在測試階段,但是功能也高階不到哪去。就這樣了,拜。
後記:
括號裡的內容是第二次審看新增的內容,旨在您閱讀時引起極大的舒適。別人怎麼看你不重要,你怎麼看你也不重要。重要的是你怎麼看別人怎麼看你,別管他,做你就好。