首页 > 代码库 > 20170511 Python练习册0000 将头像右上角加上红色的数字
20170511 Python练习册0000 将头像右上角加上红色的数字
现在开始每天做一个Python小练习,第一个练习
#!/usr/bin/env python
#-*- coding:utf8 -*-
from PIL import Image, ImageDraw, ImageFont
def add_num(img):
draw = ImageDraw.Draw(img)#创建一个可用来对img进行操作的对象,即创建绘画对象
myfont = ImageFont.truetype(‘C:/windows/fonts/Arial.ttf‘, size=40)#加载一个TrueType的字体文件,并且创建一个字体对象
fillcolor = "#ff0000" #填充颜色>>>红色
width, height = img.size #获取图片的长和宽
draw.text((width-40, 0),‘99‘, font=myfont, fill=fillcolor)
#drawObject.text(position,string,options)在图像内添加文字
#Position是一个二元元组,指定字符串左上角坐标,string是要写入的字符串
#options选项可以为fill或者font(只能选择其中之一作为第三参量,不能两个同同时存在,其中fill指定字的颜色,
# font指定字体与字的尺寸,font必须为ImageFont中指定的font类型,具体用法见ImageFont.Truetype()
img.save(‘result.jpg‘,‘jpeg‘)#保存图片,并改变格式
return 0
if __name__ == ‘__main__‘:
image = Image.open(‘D:\image.jpg‘)#打开文件
add_num(image)#调用函数
需要用到的知识有:转载自:http://www.cnblogs.com/denny402/p/5096001.html
一、图片的打开与显示
from PIL import Image img=Image.open(‘d:/dog.png‘) img.show()
虽然使用的是Pillow,但它是由PIL fork而来,因此还是要从PIL中进行import. 使用open()函数来打开图片,使用show()函数来显示图片。
这种图片显示方式是调用操作系统自带的图片浏览器来打开图片,有些时候这种方式不太方便,因此我们也可以使用另上一种方式,让程序来绘制图片。
from PIL import Image import matplotlib.pyplot as plt img=Image.open(‘d:/dog.png‘) plt.figure("dog") plt.imshow(img) plt.show()
这种方法虽然复杂了些,但推荐使用这种方法,它使用一个matplotlib的库来绘制图片进行显示。
figure默认是带axis的,如果没有需要,我们可以关掉
plt.axis(‘off‘)
打开图片后,可以使用一些属性来查看图片信息,如
print img.size #图片的尺寸 print img.mode #图片的模式 print img.format #图片的格式
显示结果为:
(558, 450) RGBA PNG
二、图片的保存
img.save(‘d:/dog.jpg‘)
就一行代码,非常简单。这行代码不仅能保存图片,还是转换格式,如本例中,就由原来的png图片保存为了jpg图片。
转载自:http://www.2cto.com/kf/201603/491448.html
一、ImageFont模块的函数
1、 Load
定义:ImageFont.load(file)? Font instance
含义:从指定的文件中加载一种字体,该函数返回对应的字体对象。如果该函数失败,将产生IOError异常。
2、 Load_path
定义:ImageFont.load_path(file)? Font instance
含义:和函数load()一样,但是如果没有指定当前路径的话,会从sys.path开始查找指定的字体文件。
3、 Truetype
定义1:ImageFont.truetype(file,size) ? Font instance
含义1:加载一个TrueType或者OpenType字体文件,并且创建一个字体对象。这个函数从指定的文件加载了一个字体对象,并且为指定大小的字体创建了字体对象。
在windows系统中,如果指定的文件不存在,加载器会顺便看看windows的字体目录下是否存在。
这个函数需要_imagingft服务。
定义2:ImageFont.truetype(file,size, encoding=value) ? Font instance
含义2:(New in 1.1.5)加载一个TrueType或者OpenType字体文件,并且使用指定的编码方式创建一个字体对象。通常的编码方式有“unic”(Unicode),“symb”(Microsoft Symbol),“ADOB”(Adobe Standard),“ADBE”(Adobe Expert)和“armn”(Apple Roman)。
下面的例子使用MicrosoftSymbol字体,即变量encoding为“symb”,在oxF000和0xF0FF之间绘制一个字符。
1
2
|
font = ImageFont.truetype( "symbol.ttf" , 16 , encoding= "symb" ) draw.text(( 0 , 0 ), unichr( 0xF000 + 0xAA )) |
4、 Load_default
定义:ImageFont.load_default()? Font instance
含义:(New in 1.1.4)加载一个默认的字体。
二、ImageFont模块的方法
Font对象必须实现下面的方法,供ImageDraw层使用。
1、 Getsize
定义:font.getsize(text)? (width, height)
含义:返回给定文本的宽度和高度,返回值为2元组。
2、 Getmask
定义:font.getmask(text,mode=”“) ? Image object
含义:为给定的文本返回一个位图。这个位图是PIL内部存储内存的实例(为Image.core接口模块定义)。
如果字体使用了抗锯齿,位图的模式为“L”,且其最大值为255。否则,它的模式为“1”。
(New in 1.1.5)可选参数mode用于一些显卡驱动指定自己喜欢的模式;如果为空,渲染器可能会返回任意模式。注意:该模式总是一个字符串。
三、ImageFont模块的实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
>>> from PIL import Image, ImageDraw, ImageFont >>> im02 = Image.open( "D:\\Code\\Python\\test\\img\\test02.jpg" ) >>> draw = ImageDraw.Draw(im02) >>> ft = ImageFont.truetype( "C:\\WINDOWS\\Fonts\\SIMYOU.TTF" , 20 ) >>> draw.text(( 30 , 30 ), u "Python图像处理库PIL从入门到精通" ,font = ft, fill = ‘red‘ ) >>> ft = ImageFont.truetype( "C:\\WINDOWS\\Fonts\\SIMYOU.TTF" , 40 ) >>> draw.text(( 30 , 100 ), u "Python图像处理库PIL从入门到精通" ,font = ft, fill = ‘green‘ ) >>> ft = ImageFont.truetype( "C:\\WINDOWS\\Fonts\\SIMYOU.TTF" , 60 ) >>> draw.text(( 30 , 200 ), u "Python图像处理库PIL从入门到精通" ,font = ft, fill = ‘blue‘ ) >>> ft = ImageFont.truetype( "C:\\WINDOWS\\Fonts\\SIMLI.TTF" , 40 ) >>> draw.text(( 30 , 300 ), u "Python图像处理库PIL从入门到精通" ,font = ft, fill = ‘red‘ ) >>> ft = ImageFont.truetype( "C:\\WINDOWS\\Fonts\\STXINGKA.TTF" , 40 ) >>> draw.text(( 30 , 400 ), u "Python图像处理库PIL从入门到精通" ,font = ft, fill = ‘yellow‘ ) >>> im02.show() |
在windows系统下,字体文件位于C:\Windows\Fonts文件夹下。本实例中用到的SIMYOU.TTF为幼圆字体文件,SIMLI.TTF为隶书字体文件,STXINGKA.TTF为行楷字体文件。用户可以根据自己的需要,从Fonts文件夹下选择所需字体文件。
字体的大小,可以根据定义字体时的第二个参数来设定。
本实例中图像im02如下图所示:
20170511 Python练习册0000 将头像右上角加上红色的数字