首页 > 代码库 > 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 将头像右上角加上红色的数字