Python 练习册,每天一个小程序----第0000题
题目
第 0000 题: 将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果。 类似于图中效果

Code:
from PIL import Image,ImageDraw,ImageFont
# path = "F:\Python Learning\Python_Exercise"
# 读取图片数据
iconPath = r"Image\WeChart.png"
# labelPath = r"Image\圆圈.png"
iconImage=Image.open(iconPath,'r')
# labelImage = Image.open(labelPath,"r") # # 标签上写字
# user_font = ImageFont.truetype('simsun.ttc',80)
# draw = ImageDraw.Draw(labelImage)
# draw.text((int(labelImage.size[0]/4),int(labelImage.size[1]/7)),u'24',font=user_font)
# labelImage.save("final.png","PNG") # 组合Icon
icon = Image.new("RGBA",(iconImage.size[0]+105,iconImage.size[1]+105))
# iconImage.paste(labelImage,(int(iconImage.size[0]-labelImage.size[0]/2-1),0))
# iconImage.save("final.png","PNG")
# 右上角数字标签会导致图片尺寸变大
icon.paste(iconImage,(0,54))
draw = ImageDraw.Draw(icon)
# 直接在图片上画圆
draw.ellipse([(iconImage.size[0]-100,5),(iconImage.size[1]+100,205)],"red")
user_font = ImageFont.truetype('simsun.ttc',100)
# 标注数字
draw.text((iconImage.size[0]-50,50),u'',"white",font=user_font)
icon.save("final.png","PNG")
Result:

总结:
Pillow API 学习
API 文档路径:http://pillow-cn.readthedocs.io/zh_CN/latest/reference/index.html
(1) PIL.Image.new(mode,size,color)
mode: 新图片的模式,如RGB,灰度图相等
size: 新图象的尺寸,元组对象(a,b)
color: 图像的填充对象
返回图像对象
(2) Image.size
获取图像尺寸,返回的是元组对象
由于返回是元组对象,则访问结果是Image.size[0]
(3) ImageDraw.Draw(im,mode=None)
创建可在图片上进行绘制Draw对象
(4) Image.paste(sourceImg,box=None,mode=None)
将一张图片粘贴到另一张图片上
Image对象指的是被粘贴的图片
sourceImg: 粘贴的源图片
box: 2元组则是粘贴图片位置的左上角开始位置
4元组则是左上角,同时包括右下角,必须符合源图片的尺寸内
mode:图片模式
(5) ImageFont.trueType(font=None,size=None,index=0,filename=None)
设置图片上字体
filename: 设置字体文件,如若没有则是找Window字体
size: 字体大小
(6) ImageDraw.Draw.eclipse(xy,fill=None,outline=0)
图片上绘制椭圆
xy:两种方式
[(x0,y0),(x1,y1)],[x0,y0,x1,y1]左上角,右上角坐标
如果要画圆形则是保证两轴长度相等
fill: 椭圆内部是否填充,填充色
outline:椭圆轮廓宽度
(7) ImageDraw.text(xy,text,fill=None,font=None)
xy: 字的右上角的位置
text:书写的问题,注意编码格式
fill:文本的颜色
font:引入字体
编码经验的总结
(1) 如果不是矢量图可能会造成叠加图片未着色遮盖,故最终选择两个图片叠加,而是直接在图片上绘制圆形
(2) 关于图片字体仍然还需进一步的学习,因为想引入微软雅黑,结果没成功,还有就是如何加粗?
(3) 如何让文字自适应在图片中间,C++中有获取字体的像素大小,还得再研究Pillow是否有这个函数?
拓展
(1) 如何抹去上面的数字标签,模拟微信已读
(2) 如何更新上面的数字,模拟不断接受新的消息,未读
思路:
code改编为函数,输入参数为未读消息数据,获取原始图片的画笔

事件响应传入相应的参数
Python 练习册,每天一个小程序----第0000题的更多相关文章
- python练习册 每天一个小程序 第0000题
PIL库学习链接:http://blog.csdn.net/column/details/pythonpil.html?&page=1 1 #-*-coding:utf-8-*- 2 __au ...
- python练习册 每天一个小程序 第0013题
# -*-coding:utf-8-*- ''' 题目描述: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-) 地址: http://tieba.baidu.com/p/21 ...
- python练习册 每天一个小程序 第0001题
1 # -*-coding:utf-8-*- 2 __author__ = 'Deen' 3 ''' 4 题目描述: 5 做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生 ...
- python练习册 每天一个小程序 第0007题
1 # -*-coding:utf-8-*- 2 __author__ = 'Deen' 3 ''' 4 题目描述: 5 有个目录,里面是你自己写过的程序,统计一下你写过多少行代码.包括空行和注释,但 ...
- python练习册 每天一个小程序 第0010题
# -*-coding:utf-8-*- ''' 题目描述: 使用 Python 生成类似于下图中的字母验证码图片 思路: 运用PIL库加random 随机字母进行生成 ''' import rand ...
- python练习册 每天一个小程序 第0009题
1 ''' 2 题目描述: 3 找出一个html文件中所有的url 4 5 思路 : 6 利用正则表达式进行匹配 7 8 ''' 9 10 11 import re 12 13 14 with ope ...
- python练习册 每天一个小程序 第0008题
1 # -*-coding:utf-8-*- 2 __author__ = 'Deen' 3 ''' 4 题目描述: 5 一个HTML文件,找出里面的正文. 6 7 思路: 8 利用Beautiful ...
- python练习册 每天一个小程序 第0006题
1 # -*-coding:utf-8-*- 2 __author__ = 'Deen' 3 ''' 4 题目描述: 5 你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都 ...
- python练习册 每天一个小程序 第0005题
1 # -*-coding:utf-8-*- 2 __author__ = 'Deen' 3 ''' 4 题目说明: 你有一个目录,装了很多照片,把它们的尺寸变成都不大于 iPhone5 分辨率的大小 ...
- python练习册 每天一个小程序 第0012题
# -*-coding:utf-8-*- def test(content): text = content flag = 0 with open('filtered_words.txt') as f ...
随机推荐
- ECLIPS-S测井系统下的仪器挂接 [TCC模块]
1. 环境 HPUX版本:11.23 Complete Image ECLIPS版本:Rel 5.1i 2. 效果图 3. 用途 为以后在此系统中挂接新仪器打下坚实的基础. 4. 参考资料 ECLIP ...
- maven的聚合和继承
Maven的聚合特性能够把项目的各个模块聚合在一起构建: 而Maven的继承特性则能帮组抽取各模块相同的依赖和插件等配置,在简化POM的同时,还能促进各个模块配置的一致性. 聚合:新建一个项目demo ...
- 【转】对GAMIT/GLOBK的基本认识
1.1 GAMIT/GLOBK软件可从网络上申请下载.该软件功能强大,用途广泛,一般包括精确定位,大气层可降水汽估计和空间电离层变化分析等.后两种用途只需要用到GAMIT模块,精确定位则还需要GL ...
- 【转】 SED多行模式空间
1. sed执行模板=sed '模式{命令1;命令2}' 即逐行读入模式空间,执行命令,最后输出打印出来 2. 为方便下面,先说下p和P,p打印当前模式空间内容,追加到默认输出之后,P打印当前模式空间 ...
- tomcat部署最佳实践(一)
Tomcat部署最佳实践 标签: linux 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 tomcat是玩web软件必会技能之一,今天我给大家介绍一下tomc ...
- float 的不确定性
很多时候,大家都知道,浮点型这个东西,本身存储就是一个不确定的数值,你永远无法知道,它是 0 = 0.00000000000000123 还是 0 = 0.00000000000999这样的东西.也许 ...
- dump、libeay32.dll、gsoap、webserver多线程调用gsoap产生崩溃
问题:调用webserver接口出现dump文件,dump文件指向libeay32.dll有问题,产生崩溃的原因是gsoap多线程问题,多线程调用时需要程序启动的地方调用如下函数进行多线程初始化: i ...
- HTA基础
HTA是HTML应用程序(HTML Application)的缩写,可以使用HTML中的绝大多数标签.脚本等.直接将HTML保存成HTA的格式,就是一个能够独立运行的应用软件. 与普通HTML网页相比 ...
- NOIP 2017 day 1 游记
心情非常复杂.大概就是我问到的所有人都A掉了T1那样. 的确没有按套路出牌,今年T1不是大模拟,反倒是T2. ……已经不想再提到今天的T1了.如果真的要我说,我只能说 我再次学了一整年的OI,结果栽到 ...
- BZOJ 3720: Gty的妹子树 [树上size分块]
传送门 题意: 一棵树,询问子树中权值大于$k$的节点个数,修改点权值,插入新点:强制在线 一开始以为询问多少种不同的权值,那道CF的强制在线带修改版,直接吓哭 然后发现看错了这不一道树上分块水题.. ...