Python 練習冊,每天一個小程式----第0000題,python0000

來源:互聯網
上載者:User

Python 練習冊,每天一個小程式----第0000題,python0000

題目

第 0000 題: 將你的 QQ 頭像(或者微博頭像)右上方加上紅色的數字,類似於未讀資訊數量那種提示效果。 類似於圖中效果

 

Code:

 1 from PIL import Image,ImageDraw,ImageFont 2 # path = "F:\Python Learning\Python_Exercise" 3 # 讀取圖片資料 4 iconPath = r"Image\WeChart.png" 5 # labelPath = r"Image\圓圈.png" 6 iconImage=Image.open(iconPath,'r') 7 # labelImage = Image.open(labelPath,"r") 8  9 # # 標籤上寫字10 # user_font = ImageFont.truetype('simsun.ttc',80)11 # draw = ImageDraw.Draw(labelImage)12 # draw.text((int(labelImage.size[0]/4),int(labelImage.size[1]/7)),u'24',font=user_font)13 # labelImage.save("final.png","PNG")14 15 # 組合Icon16 icon = Image.new("RGBA",(iconImage.size[0]+105,iconImage.size[1]+105))17 # iconImage.paste(labelImage,(int(iconImage.size[0]-labelImage.size[0]/2-1),0))18 # iconImage.save("final.png","PNG")19 # 右上方數字標籤會導致圖片尺寸變大20 icon.paste(iconImage,(0,54))21 draw = ImageDraw.Draw(icon)22 # 直接在圖片上畫圓23 draw.ellipse([(iconImage.size[0]-100,5),(iconImage.size[1]+100,205)],"red")24 user_font = ImageFont.truetype('simsun.ttc',100)25 # 標註數字26 draw.text((iconImage.size[0]-50,50),u'24',"white",font=user_font)27 icon.save("final.png","PNG")

Result:

總結:

Pillow API 學習

API 文檔路徑:http://pillow-cn.readthedocs.io/zh_CN/latest/reference/index.html

 

(1) PIL.Image.new(mode,size,color)

  mode: 新圖片的模式,如RGB,灰階圖相等

  size: 新圖象的尺寸,元組對象(a,b)

  color: 映像的填充對象

  返回映像對象

(2) Image.size

  擷取映像尺寸,返回的是元組對象

  由於返回是元組對象,則訪問結果是Image.size[0]

(3) ImageDraw.Draw(im,mode=None)

  建立可在圖片上進行繪製Draw對象

(4) Image.paste(sourceImg,box=None,mode=None)

  將一張圖片粘貼到另一張圖片上

  Image對象指的是被粘貼的圖片

  sourceImg: 粘貼的源圖片

  box: 2元組則是粘貼圖片位置的左上方開始位置

    4元組則是左上方,同時包括右下角,必須符合源圖片的尺寸內

  mode:圖片模式

(5) ImageFont.trueType(font=None,size=None,index=0,filename=None)

  設定圖片上字型

  filename: 設定字型檔,如若沒有則是找Window字型

  size: 字型大小

(6) ImageDraw.Draw.eclipse(xy,fill=None,outline=0)

  圖片上繪製橢圓

  xy:兩種方式

    [(x0,y0),(x1,y1)],[x0,y0,x1,y1]左上方,右上方座標

  如果要畫圓形則是保證兩軸長度相等

  fill: 橢圓內部是否填充,填充色

  outline:橢圓輪廓寬度

 

(7) ImageDraw.text(xy,text,fill=None,font=None)

  xy: 字的右上方的位置

  text:書寫的問題,注意編碼格式

  fill:文本的顏色

  font:引入字型

 

編碼經驗的總結

(1) 如果不是向量圖可能會造成疊加圖片未著色遮蓋,故最終選擇兩個圖片疊加,而是直接在圖片上繪製圓形

(2) 關於圖片字型仍然還需進一步的學習,因為想引入微軟雅黑,結果沒成功,還有就是如何加粗?

(3)   如何讓文字自適應在圖片中間,C++中有擷取字型的像素大小,還得再研究Pillow是否有這個函數?

拓展

(1) 如何抹去上面的數字標籤,類比已讀

(2) 如何更新上面的數字,類比不斷接受新的訊息,未讀

思路:

code改編為函數,輸入參數為未讀訊息資料,擷取原始圖片的畫筆

 

事件響應傳入相應的參數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.