1. 程式人生 > >python手記(四):pillow(四) ImageDraw模組 圖片繪製

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(xyfilloutline)

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(xyfill)

這個有趣,畫點點。引數沒什麼區別。直接看看例子吧:

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,這個模組差不多就這樣吧,還有幾個方法的開發在測試階段,但是功能也高階不到哪去。就這樣了,拜。

 

 

 

後記:

括號裡的內容是第二次審看新增的內容,旨在您閱讀時引起極大的舒適。別人怎麼看你不重要,你怎麼看你也不重要。重要的是你怎麼看別人怎麼看你,別管他,做你就好。