Problem: 将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果。

Solution: Add Number to Avatar, Python:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# @Date : 2015-02-14 09:55:04
# @Author : NSSimacer
# @Version : 1.0
from PIL import Image, ImageDraw, ImageFont
origin_avatar = "avatar.png"
saved_avatar = "avatar_new.png"
windows_font = "YaHei.Consolas.1.11b.ttf"
text_color = (255, 0, 0)
def draw_text(text, fill_color, windows_font):
try:
image = Image.open(origin_avatar)
x, y = image.size
image.show()
draw_image = ImageDraw.Draw(image)
font = ImageFont.truetype(windows_font, 96)
draw_image.text((660, 1), text, fill_color, font)
image.save(saved_avatar)
image = Image.open(saved_avatar)
image.show()
except:
print 'Unable to load image!'
if __name__ == '__main__':
draw_text("99+", text_color, windows_font)

主要目的是熟悉 PIL 基本的 API ——读取图像,设置写字用的字体,写字,保存图片,显示图片等操作。程序执行过程遇到一个错误,应该是由于程序中使用了 Windows 平台的 TTF 字体:

ImportError: The _imagingft C module is not installed

File "D:\Python26\Lib\site-packages\PIL\ImageFont.py", line 34, in __getattr__
  raise ImportError("The _imagingft C module is not installed")

我的解决方式是:安装 Pillow 代替 PIL。

参考 StackOverflow 的讨论:Python: The _imagingft C module is not installed

题目来源:Python 练习册,每天一个小程序 THX!