您的位置:时时app平台注册网站 > 编程知识 > 用 Python 的 PIL 模块为头像加多“未读音信”指示

用 Python 的 PIL 模块为头像加多“未读音信”指示

2019-11-28 03:07

 

代码演示

代码是基于 Python3 的,Python2 的 PIL 模块有所分裂。

#!/usr/bin/env python
#-*- coding: utf-8 -*-
from PIL import Image, ImageDraw, ImageFont

im = Image.open("test.jpeg")  # 创建图片对象
w,h = im.size  # 获取图片对象的宽和高
font = ImageFont.truetype('/Library/Fonts/Arial Rounded Bold.ttf', int(h/4))
# 创建字体对象,我把字体的大小设为高度1/4,如果数字多于个位应该再小点

ImageDraw.Draw(im).pieslice([(w/3*2, 0), (w, h/3)], 0, 360, fill="red")
# 绘制圆形,第一个参数界定绘制区域,我选择了宽高为原图1/3的右上角区域
# 不难发现坐标系是以左上角为原点,向下y递增,向右x递增
ImageDraw.Draw(im).text((w * 0.76, h * 0.02), '5', font=font, fill="white")
# 第一个参数是坐标,第二个参数是文本绘制内容,第三个是字体对象

im.show()  # 展示绘制结果(使用系统默认的图片浏览器)
#当然也可以用im.save()函数保存结果

让大家测验一下:

时时app平台注册网站 1

处理前

时时app平台注册网站 2

处理后

意义还不易。
总共7行代码就达成了那么些效应,当然通过校正能够写成命令行脚本、批管理脚本,恐怕越发智能化。

  font:引进字体

  • PIL.Image.open(fp, mode='r') 张开并辨认出图片,生成图片对象
  • PIL.ImageDraw.Draw.text(xy,text, fill=None, font=None, anchor=None) 用来为图片对象绘制数字
  • PIL.ImageDraw.Draw.pieslice(xy, start, end, fill=None, outline=None) 用来为图片对象绘制扇形(圆形也正是非常的扇形辣卡塔 尔(英语:State of Qatar)
  • PIL.ImageFont.truetype(font=None, size=10, index=0, encoding='') 用来读取 TrueType 和 OpenType 字体文件,同有时间生成字体对象,仍然为能够设定字体对象的深浅

  filename: 设置字体文件,假使未有则是找Window字体

时时app平台注册网站 3

  再次回到图像对象

既是是图像管理,小编觉着 PIL 能够胜任,倘诺是起头上手,能够看看 廖雪峰的Python教程 - PIL。当然,光是教程里使用的函数是非常不足用的,所以再检查合法的文书档案。
自家前后翻阅文书档案认为能够采纳以下函数:

(6) ImageDraw.Draw.eclipse(xy,fill=None,outline=0)


  fill: 椭圆内部是不是填充,填充色

效果展现

  Image对象指的是被粘贴的图纸


(4) Image.paste(sourceImg,box=None,mode=None)

Python 练习册 的第0000题
描述:将你的 QQ 头像(可能博客园头像卡塔 尔(阿拉伯语:قطر‎右上角加上红色的数字,相同于Wechat未读信息数据那种提醒功能。 近似于图中成效

Code:

(5) ImageFont.trueType(font=None,size=None,index=0,filename=None)

  图片上制图椭圆

 

(3)   怎么着让文字自适应在图片个中,C 中有拿到字体的像素大小,还得再钻探Pillow是或不是有这些函数?

 

思路:

  color: 图像的填充对象

  xy: 字的右上角的职位

 

  mode:图片方式

时时app平台注册网站 4

  将一张图片粘贴到另一张图纸上

code改编为函数,输入参数为未读新闻数据,获取原始图片的画笔

总结:

  sourceImg: 粘贴的源图片

(7) ImageDraw.text(xy,text,fill=None,font=None)

  xy:三种艺术

  由于再次来到是元组对象,则做客结果是Image.size[0]

(2) Image.size

用 Python 的 PIL 模块为头像加多“未读音信”指示时时app平台注册网站。题目

  size: 字体大小

事件响应传入相应的参数

时时app平台注册网站 5

  outline:椭圆轮廓宽度

API 文书档案路线:

  size: 新图象的尺码,元组对象(a,b)

(1) PIL.Image.new(mode,size,color)

第 0000 题: 将你的 QQ 头像(只怕网易头像卡塔 尔(阿拉伯语:قطر‎右上角加上铁红的数字,相符于Wechat未读信息数据这种提醒意义。 相通于图中效果

  fill:文本的颜料

  创设可在图纸上进展绘图Draw对象

(1) 怎么着抹去地点的数字标签,模拟Wechat已读

(3) ImageDraw.Draw(im,mode=None)

时时app平台注册网站 6

拓展

(2) 怎样翻新方面包车型大巴数字,模拟不断接收新的信息,未读

 1 from PIL import Image,ImageDraw,ImageFont
 2 # path = "F:Python LearningPython_Exercise"
 3 # 读取图片数据
 4 iconPath = r"ImageWeChart.png"
 5 # labelPath = r"Image圆圈.png"
 6 iconImage=Image.open(iconPath,'r')
 7 # labelImage = Image.open(labelPath,"r")
 8 
 9 # # 标签上写字
10 # user_font = ImageFont.truetype('simsun.ttc',80)
11 # draw = ImageDraw.Draw(labelImage)
12 # draw.text((int(labelImage.size[0]/4),int(labelImage.size[1]/7)),u'24',font=user_font)
13 # labelImage.save("final.png","PNG")
14 
15 # 组合Icon
16 icon = Image.new("RGBA",(iconImage.size[0] 105,iconImage.size[1] 105))
17 # iconImage.paste(labelImage,(int(iconImage.size[0]-labelImage.size[0]/2-1),0))
18 # iconImage.save("final.png","PNG")
19 # 右上角数字标签会导致图片尺寸变大
20 icon.paste(iconImage,(0,54))
21 draw = ImageDraw.Draw(icon)
22 # 直接在图片上画圆
23 draw.ellipse([(iconImage.size[0]-100,5),(iconImage.size[1] 100,205)],"red")
24 user_font = ImageFont.truetype('simsun.ttc',100)
25 # 标注数字
26 draw.text((iconImage.size[0]-50,50),u'24',"white",font=user_font)
27 icon.save("final.png","PNG")

  mode: 新图片的形式,如奇骏GB,灰度图相等

  box: 2元组则是贴边图片地方的左上角最初地点

  设置图片上字体

(1) 如若不是矢量图恐怕会促成叠加图片未着色隐讳,故最终采撷三个图片叠合,而是一向在图片上制图圆形

 

(2) 关于图片字体照旧还需进一层的求学,因为想引进微软雅黑,结果没成功,还会有便是怎样加粗?

用 Python 的 PIL 模块为头像加多“未读音信”指示时时app平台注册网站。Pillow API 学习

  倘若要画圆形则是确定保障两轴长度相等

    4元组则是左上角,同期回顾右下角,必需相符源图片的尺码内

编码经历的下结论

  获取图像尺寸,重回的是元组对象

  text:书写的主题材料,注意编码格式

用 Python 的 PIL 模块为头像加多“未读音信”指示时时app平台注册网站。    [(x0,y0),(x1,y1)],[x0,y0,x1,y1]左上角,右上角坐标

Result:

本文由时时app平台注册网站发布于编程知识,转载请注明出处:用 Python 的 PIL 模块为头像加多“未读音信”指示

关键词: