Pillow 也叫 PIL,全称为 Python Imaging Library,已经是 Python 平台事实上的图像处理标准库了。PIL 功能非常强大,并且 API 非常简单易用。
我们可以使用 pip 来安装 PIL,注意用 pip 安装 PIL时,不能用 pip install PIL,必须用 pip install pillow 命令来安装。
用 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 模块的类库做一个项目开发中常见的需求——生成字母验证码图片。我们生成验证码图片后,存储在项目目录下(文件名为: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 其它相关类库。
把生成图片验证码的程序用面向对象的形式写出来(注意:对于用到的硬编码的数字尽量写成变量的方式)。
好文章
零基础小白问个问题,图片要如何导入进去?图片任何位置都可以么?
可以,很有意思
python无敌
我也会写验证码了,很实用
PIL很久以前就被pillow接手了吧,要装PIL库的话直接装pillow
imagepy也挺不错的
这个我也学习了,感觉自己学完就忘了,不知道你学习掌握的怎么样?