这几天看了些python的基础教程,感觉好多都是重复的内容,而且本着实践是验证真理的唯一标准的想法,就找了一套python练习题来做。

在开始之前想为大家推荐一些我感觉还不错的python教程,希望对大家有所帮助:

1、python3.4教程

2、python2.7教程

3、慕课网python入门教程

4、Codecademy python教程

5、知乎收藏夹-知乎那些事

6、还有我正在做的python练习册

言归正传,python练习册的第一道题内容如下:

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

头像

其实这道题不难,主要是了解PIL(Python Imaging Library)库的使用方法就好了,但问题是这个库官方版只支持python2.+版本,让我这种使用python3.+的感到很头疼。

所有已经有人解决这个问题了,为python3.+定制了pillow库,其实还是PIL,只是适配了python3.+

下载地址轻戳我

也可以使用pip install pilloweasy_install pillow来在线安装

附官方安装教程pillow installation

下载后得到.egg文件,解压后放到python安装目录下的lib文件夹下即可

写博客的时候惊讶地发现linux下自带PIL、pillow包。。。


下面开始正式解决这个问题吧!

可能很多人看到题目要求后会想到直接在图片上添加文字,这种想法是很正确的。

我在这里用了两种方法来做:

1、直接在图片右上角添加文字

2、先把文字生成一张图片,再合并两张图片

先上第一份代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
#0000-为图片添加水印
from PIL import Image, ImageFilter, ImageFont, ImageDraw
def draw_str(img_pos, font_pos, text):#传入待绘画图片位置,
#img_pos 为待绘画图片位置,font_pos为想要使用的字体路劲,text为想要添加的文字
image = Image.open(img_pos)#打开图片
dr = ImageDraw.Draw(image)
font = ImageFont.truetype(font_pos, 40)#设置加载字体位置,以及字体大小
dr.text((image.size[0]-50, 0), text, font=font, fill="#FF0000")#设置添加位置、添加内容、以及颜色
image.save("复件" + img_pos)#另存为
#image.show()
draw_str("1.png", "/usr/share/fonts/truetype/ubuntu-font-family/Ubuntu-R.ttf", "1")

注释地比较详细了,其实就是函数的调用而已。

再来第二份代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#0000-为图片添加水印
from PIL import Image, ImageFilter, ImageFont, ImageDraw
def draw_str(img_pos, font_pos, text):#同上
backimg = Image.open(img_pos)
foreimg = Image.new("RGB", (35, 35), (255, 255, 255))#生成一个新图片,设置大小,背景色
dr = ImageDraw.Draw(foreimg)
font = ImageFont.truetype(font_pos, 40)
dr.text((10, 5), text, font=font, fill="#FF0000")#先把文字添加在这张新建图片上
foreimg.save('2.png')
foreimg = Image.open('2.png')
backimg.paste(foreimg, (backimg.size[0]-50, 0))#合并图片
backimg.show()
backimg.save("复件"+img_pos)
draw_str('1.png', '/usr/share/fonts/truetype/ubuntu-font-family/Ubuntu-R.ttf', '1')

附效果:

原图片:原图片

中间产生图片:中间图片

最终结果:新图片