Python 練習(xí)冊(cè) 的第0000題
描述:將你的 QQ 頭像(或者微博頭像)右上角加上紅色的數(shù)字蔬啡,類似于微信未讀信息數(shù)量那種提示效果师妙。 類似于圖中效果
效果展示
既然是圖像處理诵肛,我覺得 PIL 可以勝任,如果是初步上手默穴,可以看看 廖雪峰的Python教程 - PIL怔檩。當(dāng)然,光是教程里使用的函數(shù)是不夠用的蓄诽,所以再查查官方的文檔薛训。
我上下翻閱文檔覺得可以使用以下函數(shù):
- PIL.Image.open(fp, mode='r') 打開并辨認(rèn)出圖片,生成圖片對(duì)象
- PIL.ImageDraw.Draw.text(xy,text, fill=None, font=None, anchor=None) 用來為圖片對(duì)象繪制數(shù)字
- PIL.ImageDraw.Draw.pieslice(xy, start, end, fill=None, outline=None) 用來為圖片對(duì)象繪制扇形(圓形也就是特殊的扇形辣)
- PIL.ImageFont.truetype(font=None, size=10, index=0, encoding='') 用來讀取 TrueType 和 OpenType 字體文件仑氛,同時(shí)生成字體對(duì)象乙埃,還能設(shè)定字體對(duì)象的大小
代碼演示
代碼是基于 Python3 的,Python2 的 PIL 模塊有所不同锯岖。
#!/usr/bin/env python
#-*- coding: utf-8 -*-
from PIL import Image, ImageDraw, ImageFont
im = Image.open("test.jpeg") # 創(chuàng)建圖片對(duì)象
w,h = im.size # 獲取圖片對(duì)象的寬和高
font = ImageFont.truetype('/Library/Fonts/Arial Rounded Bold.ttf', int(h/4))
# 創(chuàng)建字體對(duì)象介袜,我把字體的大小設(shè)為高度1/4,如果數(shù)字多于個(gè)位應(yīng)該再小點(diǎn)
ImageDraw.Draw(im).pieslice([(w/3*2, 0), (w, h/3)], 0, 360, fill="red")
# 繪制圓形出吹,第一個(gè)參數(shù)界定繪制區(qū)域遇伞,我選擇了寬高為原圖1/3的右上角區(qū)域
# 不難發(fā)現(xiàn)坐標(biāo)系是以左上角為原點(diǎn),向下y遞增捶牢,向右x遞增
ImageDraw.Draw(im).text((w * 0.76, h * 0.02), '5', font=font, fill="white")
# 第一個(gè)參數(shù)是坐標(biāo)鸠珠,第二個(gè)參數(shù)是文本繪制內(nèi)容,第三個(gè)是字體對(duì)象
im.show() # 展示繪制結(jié)果(使用系統(tǒng)默認(rèn)的圖片瀏覽器)
#當(dāng)然也可以用im.save()函數(shù)保存結(jié)果
讓我們測(cè)試一下:
處理前
處理后
效果還不錯(cuò)秋麸。
共計(jì)7行代碼就完成了這個(gè)功能渐排,當(dāng)然通過修改可以寫成命令行腳本、批處理腳本灸蟆,或者更加智能化驯耻。