1. 题目
第 0000 题:将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果。
2. 实现效果
原图 结果图- 绘制红色圆形底色
- 绘制白色数字
3. 具体实现
Python2.7 版本以前,使用pil(python image library)库可以方便的进行图像操作,3.0版本以后pil库不再更新, 需要安装Pillow库来替代。
pip install pillow
实现代码如下:
# -*- coding: utf-8 -*-
from PIL import Image, ImageDraw, ImageFont
def add_num(num):
im = Image.open('one.jpg')
draw = ImageDraw.Draw(im)
num_size = min(im.size) // 5 #计算数字大小,返回整数
font = ImageFont.truetype('C:\Windows\Fonts\Arial.ttf', num_size)
draw.ellipse((im.size[0] - num_size, 0, im.size[0], num_size), fill=(255, 0, 0))
draw.text((im.size[0] - num_size + 40, 0), str(num), font=font, fill=(255, 255, 255))
im.save('0000.jpg', 'jpeg')
im.show()
if __name__ == '__main__':
add_num(3)
在调整位置时需要注意,画圆时传入的为圆的外接矩形坐标,画数字时传入的为数字的左上角坐标。
4. 学习pillow库遇到的问题
<i><b>i. 设置字体IOError: cannot open resource</b></i>
在执行ImageFont.truetype(font=None, size=10, index=0, encoding="")
时出现这种错误。
原因可能是字库未找到, 在你的本地文件夹下找到对应的ttf文件,写入绝对路径就可以了。
<i><b>ii. 画出来的圆形有锯齿,不平滑</b></i>
ImageDraw中没有具体的设置,如果想要达到光滑的效果,可以先设置图片尺寸*2,之后调用resize()
函数尺寸/2,设置filter=Image.ANTIALIAS
网友评论