《老鸟python 系列》视频上线了,全网稀缺资源,涵盖python人工智能教程,爬虫教程,web教程,数据分析教程以及界面库和服务器教程,以及各个方向的主流实用项目,手把手带你从零开始进阶高手之路!点击 链接 查看详情




第三方图片处理模块PIL

阅读:227567873    分享到

Pillow 也叫 PIL,全称为 Python Imaging Library,已经是 Python 平台事实上的图像处理标准库了。PIL 功能非常强大,并且 API 非常简单易用。

我们可以使用 pip 来安装 PIL,注意用 pip 安装 PIL时,不能用 pip install PIL,必须用 pip install pillow 命令来安装。

使用 PIL 模块的 Image

用 Image 类的 thumbnail 函数对我们本地磁盘的图形文件进行缩放操作。注意:thumbnail 函数缩放图片比例必须为大于 0 小于等于 1,并且函数对图片缩放的高和宽比例必须一致,如果不一致,以缩放比例最大的参数为准。

from PIL import Image

img = Image.open("d:/test.png")    # 确保 d 盘下存在 test.png 图片文件
w = img.size[0]  # 图片宽度
h = img.size[1]  # 图片高度
img.thumbnail((w * 0.5, h * 0.5))  # 缩放的参数必须大于 0 且 小于等于 1
img.save("d:/testcopy.png")        # 缩放后另存为 testcopy.png

我们可以用 Image 类的 resize 函数进对图片进行非等比例缩放。

from PIL import Image

img = Image.open("d:/test.png")  # 确保 d 盘下存在 test.png 图片文件
w = img.size[0]  # 图片宽度
h = img.size[1]  # 图片高度
img.resize((w * 2, h * 3))       # 缩放的倍数必须为正整数
img.save("d:/testcopy.png")      # 缩放后另存为 testcopy.png

使用 PIL 模块的其它常用函数

PIL 模块功能非常丰富,它不但提供了很多有用的处理图片的类库,还提供了一系列绘图的类库,下面我们使用常用的 PIL 模块的类库做一个项目开发中常见的需求——生成字母验证码图片。我们生成验证码图片后,存储在项目目录下(文件名为:code.jpg)

from PIL import Image, ImageDraw, ImageFont, ImageFilter
import random

# 生成随机大写字母,ascii为 [65, 90],
def rndChar():
    return chr(random.randint(65, 90))

# 生成填充颜色,返回 RGB 值,每个颜色值在(128, 255)之间
def rndColor():
    return (random.randint(128, 255), random.randint(128, 255), random.randint(128, 255))

# 生成字体颜色,返回 RGB 值,每个颜色值在(0, 127)之间,在此我只是为了不和背景颜色重叠,大家可以自行设置。
def rndColor2():
    return (random.randint(0, 127), random.randint(0, 127), random.randint(0, 127))

# 图片大小(存放 5 个随机字母),宽度为:400,高度为:80
width = 80 * 5
height = 80

# 黑色背景,RGB值为:(0, 0, 0)
image = Image.new('RGB', (width, height), (0, 0, 0))

# 创建 Font 对象,设定字体大小为 36
font = ImageFont.truetype('C:/Windows/Fonts/verdana.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(5):
    draw.text((80 * t + 10, 10), rndChar(), font=font, fill=rndColor2())

# 让验证码图片模糊
image = image.filter(ImageFilter.BLUR)
image.save('code.jpg', 'jpeg')

Python 有大量的功能丰富的第三方模块,我们在使用第三方模块时,可以对某些函数的功能进行猜测,如果猜测的结果不对时,要学会查找第三模块的官方文档来进行学习。

本节重要知识点

会使用 PIL 做图片处理。

会自己查找学习 PIL 其它相关类库。

作业

把生成图片验证码的程序用面向对象的形式写出来(注意:对于用到的硬编码的数字尽量写成变量的方式)。


如果以上内容对您有帮助,请老板用微信扫一下赞赏码,赞赏后加微信号 birdpython 领取免费视频。


登录后评论

user_image
David-Lau
2020年4月5日 17:05 回复

这个我也学习了,感觉自己学完就忘了,不知道你学习掌握的怎么样?


user_image
山涧小泥鳅
2019年11月29日 23:20 回复

好文章


user_image
RebeccaC
2019年11月11日 16:23 回复

零基础小白问个问题,图片要如何导入进去?图片任何位置都可以么?


user_image
邪叫教主
2019年9月30日 21:08 回复

可以,很有意思


user_image
JeAnine9ann
2019年3月10日 16:44 回复

python无敌


user_image
庄文强
2019年2月7日 16:41 回复

我也会写验证码了,很实用


user_image
吴玺煜
2019年1月24日 06:25 回复

PIL很久以前就被pillow接手了吧,要装PIL库的话直接装pillow


user_image
伊利杀白
2018年11月22日 13:26 回复

imagepy也挺不错的