Python的GUI编程(二)

前言:承接上一篇博客,在本节内容继续介绍PIL。PIL(PythonImagingLibrary)是Python中最常用的图像处理库,对图像进行基础操作的功能基本都包含于此模块内。如open、save、conver、show…等功能。由于PIL仅支持到Python2.7,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了许多新特性,因此,我们可以直接安装使用Pillow。

这里给出官网地址以便后续的学习:
英文版https://pillow.readthedocs.io/en/5.1.x/
中文版http://pillow-cn.readthedocs.io/zh_CN/latest/

Pillow安装

通过pip install pillow语句,或者在IDE中直接搜索添加,操作如下:

5-4

实践

来看一个有意思的实现。

生成字母验证码图片

 from PIL import Image, ImageDraw, ImageFont, ImageFilter
 import random
 # 随机字母:
 def rndChar():
     return chr(random.randint(65, 90))
 # 随机颜色1:
 def rndColor():
     return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))
 # 随机颜色2:
 def rndColor2():
     return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127))
 # 240 x 60:
 width = 60 * 4
 height = 60
 image = Image.new('RGB', (width, height), (255, 255, 255))
 # 创建Font对象:
 font = ImageFont.truetype('C:\\Windows\\Fonts\\Arial.ttf', 36)#注意这里定义为字体文件的绝对位置
 # 创建Draw对象:
 draw = ImageDraw.Draw(image)
 # 填充每个像素:
 for x in range(width):
     for y in range(height):
         draw.point((x, y), fill=rndColor())
 # 输出文字:
 for t in range(4):
     draw.text((60 * t + 10, 10), rndChar(), font=font, fill=rndColor2())
 # 模糊:
 image = image.filter(ImageFilter.BLUR)
 image.save('code.jpg', 'jpeg')
 image.show()

显示效果如图:

5-5

常见用法

#导入模块
from PIL import Image
#读取文件
img = Image.open('test.jpg')
#保存文件
#img.save(filename,format)
img.save(filename,"JPEG")
#获取图片大小
(width,height) = img.size
#获取图片的源格式
img_format = img.format
#获取图片模式,有三种模式:L(灰度图像),RGB(真彩色)和CMYK(pre-press图像)
img_mode = img.mode
#图片模式的转换
img = img.convert("L")  #转化成灰度图像
#获取每个坐标的像素点的RGB值
r,g,b = img.getpixel((j,i))
#重设图片大小
img = img.resize(width,height)
#创建缩略图
img.thumbnail(size)

PIL用法比较简单其余用法可以参看官方文档。