Python練習第一題,在圖片上加入數字

題目:在頭像(QQ、微信等)右上角加上紅色的數字,類似於微信未讀信息數量那種提示效果。

下面是示例,在圖片上加數字。

用PS很簡單就可以做到,但是如何用Python完成呢?

一、思路:利用Python強大的圖片處理庫——Pillow

推薦閱讀官方文檔(Pillow (PIL Fork) 4.0.0 documentation)

下面介紹今天會用到的模塊:The ImageDraw Module,他的功能如下,

支持2D圖像

創建繪畫對象

基本繪畫操作

  • 弧/弦/扇形 chord arc pieslice (bbox, strtAng, endAng)
  • 橢圓 ellipse (bbox)
  • 線段/多段線 line (L) draw.line(((60,60),(90,60), (90,90), (60,90), (60,60))) #draw a square
  • 點 point (xy) #單像素點很小看不清,實際中可用實心小圓代替
  • 多邊形 polygon (L) draw.polygon([(60,60), (90,60), (90,90), (60,90)]) #draw a square
  • 矩形 rectangle (bbox) # first coord屬於矩形, second coord不屬於
  • 文字 text(xy,message,font=None) 繪製文字message,文本區域左上角坐標為xy

    drawable.text((10, 10), "Hello", fill=(255,0,0), font=None)
  • 文字大小 textsize(message,font=None) 給定文字message,返回所佔像素(width,height)

可選參數

矢量字體支持

二、示例練習

環境:Python3.5

from PIL import Image, ImageDraw, ImageFontimg = Image.open("girl.jpg")draw = ImageDraw.Draw(img)myfont = ImageFont.truetype("C:/windows/fonts/Arial.ttf", size=80)fillcolor = "#ff0000"width, height = img.sizedraw.text((40,40),"hello", font=myfont, fill=fillcolor)img.save("result.jpg","jpeg")

效果展示:

也就是在原圖上加入文字,下面一步步分析過程。

from PIL import Image, ImageDraw, ImageFont

首先導入相關模塊,沒有安裝可以直接用pip安裝

img = Image.open("girl.jpg")draw = ImageDraw.Draw(img)

打開圖片girl.jpg

myfont = ImageFont.truetype("C:/windows/fonts/Arial.ttf", size=80)fillcolor = "#ff0000"width, height = img.size

Arial.ttf是電腦上安裝的字體,fillcolor是填充顏色,#ff0000是十六進位顏色

draw.text((40,40),"hello", font=myfont, fill=fillcolor)img.save("result.jpg","jpeg")

最後就是添加文字了,(40,40)是位置,"hello"自定義,最後保存。

三、總結

好了,今天的題目講完了,其中我也遇到很多困難,我準備在圖片中加入中文,但是文字無法正常顯示,朋友們,有誰知道答案嗎?

打算以後每天寫一篇題目解析,這些題目在github上都有,最後求一波star(?? . ??)

本題github地址:zhangslob/Image

這是@史江歌大神整理的Python題目,我會詳細講解過程Yixiaohan/show-me-the-code

最後,我想給自己定個目標,2017年利用Python找到一份工作,養活自己。

你呢?


推薦閱讀:

機器學習之Python基礎(五) --協程,分散式
幾個提高工作效率的Python內置小工具
高德API+Python解決租房問題
爬蟲入門系列(一):快速理解 HTTP 協議

TAG:Python | Python入门 | PIL |