题目

第 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题的更多相关文章

  1. python练习册 每天一个小程序 第0000题

    PIL库学习链接:http://blog.csdn.net/column/details/pythonpil.html?&page=1 1 #-*-coding:utf-8-*- 2 __au ...

  2. python练习册 每天一个小程序 第0013题

    # -*-coding:utf-8-*- ''' 题目描述: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-) 地址: http://tieba.baidu.com/p/21 ...

  3. python练习册 每天一个小程序 第0001题

    1 # -*-coding:utf-8-*- 2 __author__ = 'Deen' 3 ''' 4 题目描述: 5 做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生 ...

  4. python练习册 每天一个小程序 第0007题

    1 # -*-coding:utf-8-*- 2 __author__ = 'Deen' 3 ''' 4 题目描述: 5 有个目录,里面是你自己写过的程序,统计一下你写过多少行代码.包括空行和注释,但 ...

  5. python练习册 每天一个小程序 第0010题

    # -*-coding:utf-8-*- ''' 题目描述: 使用 Python 生成类似于下图中的字母验证码图片 思路: 运用PIL库加random 随机字母进行生成 ''' import rand ...

  6. python练习册 每天一个小程序 第0009题

    1 ''' 2 题目描述: 3 找出一个html文件中所有的url 4 5 思路 : 6 利用正则表达式进行匹配 7 8 ''' 9 10 11 import re 12 13 14 with ope ...

  7. python练习册 每天一个小程序 第0008题

    1 # -*-coding:utf-8-*- 2 __author__ = 'Deen' 3 ''' 4 题目描述: 5 一个HTML文件,找出里面的正文. 6 7 思路: 8 利用Beautiful ...

  8. python练习册 每天一个小程序 第0006题

    1 # -*-coding:utf-8-*- 2 __author__ = 'Deen' 3 ''' 4 题目描述: 5 你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都 ...

  9. python练习册 每天一个小程序 第0005题

    1 # -*-coding:utf-8-*- 2 __author__ = 'Deen' 3 ''' 4 题目说明: 你有一个目录,装了很多照片,把它们的尺寸变成都不大于 iPhone5 分辨率的大小 ...

  10. python练习册 每天一个小程序 第0012题

    # -*-coding:utf-8-*- def test(content): text = content flag = 0 with open('filtered_words.txt') as f ...

随机推荐

  1. scrapy_创建_调试

    如何创建scrapy项目? 输入命令: scrapy startproject project_name 在当前目录下创建名字叫project_name的scrapy项目 命令格式:scrapy st ...

  2. linkin大话设计模式--单例模式

    linkin大话设计模式 开文前先弱弱的问一句:什么是设计模式?我在研究java2ee的时候有研究过,在学js的时候也有看到.设计模式的概念最早源于建筑设计大师<建筑的永恒算法>一书,它表 ...

  3. myeclipse环境搭建

    公司来了几个新人,老是在教他们环境搭建这些,每次在帮他们调试代码的时候老是不厌其烦的看着他们坐等myeclipse编译了,校验了什么的,而且在编码的时候也不使用快捷键,然后我就只能默默的坐回去了.为了 ...

  4. linkin大话数据结构--apache commons工具类

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动. 一.Commons BeanUtils 说明:针对Bean的一个工具集.由于Bean往往是有一堆ge ...

  5. windows 7 wifi热点配置

    自我总结,有什么不足或更好的解决方案,请告知,感激不尽! 目的:闲来无事的童鞋,可以试一试自己配置wifi热点. ps:其实wifi热点配置是系统存在的功能,只不过需要配置. 现在win桌面wifi热 ...

  6. Lucene.net(4.8.0) 学习问题记录五: JIEba分词和Lucene的结合,以及对分词器的思考

    前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...

  7. git的学习笔记

    1. Git介绍 Git是一个开源的分布式版本控制软件,用以有效.高速的处理从很小到非常大的项目版本管理. Git 最初是由Linus Torvalds设计开发的,用于管理Linux内核开发. Git ...

  8. SpringMVC源码情操陶冶-AbstractHandlerMethodMapping

    承接前文SpringMVC源码情操陶冶-AbstractHandlerMapping,本文将介绍如何注册HandlerMethod对象作为handler 类结构瞧一瞧 public abstract ...

  9. 51NOD 1227 平均最小公倍数 [杜教筛]

    1227 平均最小公倍数 题意:求\(\frac{1}{n} \sum_{i=1}^n lcm(n,i)\) 和的弱化版? \[ ans = \frac{1}{2}((\sum_{i=1}^n \su ...

  10. BZOJ 3514: Codechef MARCH14 GERALD07加强版 [LCT 主席树 kruskal]

    3514: Codechef MARCH14 GERALD07加强版 Time Limit: 60 Sec  Memory Limit: 256 MBSubmit: 1312  Solved: 501 ...