赞
踩
目录
PIL(Python Image Library)是PythonWare公司提供的免费图像处理工具包。由于其强大的功能,已经是Python平台事实上的图像处理标准库了。
PIL功能非常强大,提供许多关于图像处理功能,如:改变图像大小,旋转图像,图像格式转换,色场空间转换,图像增强,直方图处理,插值和滤波等等。
由于PIL仅支持到Python 2.7,于是社区在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x。 Pillow支持PIL的所有相关功能,所以在Python3.x环境下,可以使用Pillow来代替PIL。
直接使用pip安装部署:
$ pip install pillow
示例代码
- from PIL import Image
- im = Image.open("./data/cat.jpg")
- im.show()
-
- # 保存为gif格式
- im.save("./data/cat.gif", "GIF")
-
- # 裁剪图片, 左上点坐标(300,100), 右下点坐标(800,700)
- rect = 300,100,800,700
- im.crop(rect).show()
-
- # 添加滤镜效果
- im.filter(ImageFilter.CONTOUR).show()
-
- # 左右翻转
- im.transpose(Image.FLIP_LEFT_RIGHT).show()
-
- # 旋转180°
- im.rotate(180).show()
-
- # 8,操作像素
- for x in range(300, 400):
- for y in range(100, 200):
- im.putpixel((x, y), (255, 0, 0))
- im.show()
-
- # 图片缩放50%
- print("im.width: %d, im.height:%d" % (im.width, im.height))
- im.thumbnail((im.width/10, im.height/10))
- print("im.thumbnail.width: %d, im.thumbnail.height:%d" %(im.width, im.height))
- im.show()
-
- # 创建图片
- img2 = Image.new("RGBA", (640, 480), (0, 255, 0))
- img2.show()
- img2.save("./data/newImage.png","PNG")
-
-
运行结果
1. 裁剪
2. 模糊
3. 反转
4. 旋转180°
5. 修改局部像素
6. 缩略图
场景说明
在进行登录验证时,为确保安全性,一般会要求用户输入相关图片验证码。下面我们使用Pillow库来生成登录验证码。 生成验证码的基本过程如下:
示例代码
- from PIL import Image, ImageDraw, ImageFont
- from random import choice, randint, randrange
- import string
-
- # 候选字符集,大小写字母+数字
- chrs = string.ascii_letters + string.digits
-
-
- def rand_chars(length):
- """
- 返回length个随机字符串
- """
- result = ''.join(choice(chrs) for _ in range(length))
- return result
-
- def rand_color():
- """
- 设置随机颜色
- """
- r = randint(0, 255)
- g = randint(0, 255)
- b = randint(0, 255)
- return (r, g, b)
-
- def draw_rand_line(num, size, draw):
- """
- 绘制随机干扰线
- """
- # 绘制随机干扰线,这里设置为8条
- for i in range(num):
- start = (0, randrange(size[1]))
- end = (size[0], randrange(size[1]))
- draw.line([start, end], fill=rand_color(), width=1)
-
- # 绘制随机弧线
- for i in range(8):
- start = (-50, -50) # 起始位置在外边看起来才会像弧线
- end = (size[0]+10, randint(0, size[1]+10))
- draw.arc(start+end, 0, 360, fill=rand_color())
-
- def draw_rand_point(size, draw):
- """
- 绘制随机干扰点
- """
- for i in range(int(size[0]*size[1]*0.07)): # 7%密度的干扰像素
- draw.point((randrange(size[0]), randrange(size[1])), fill=rand_color()) # randrange取值范围是左开右闭
-
- def verify_code(size, chrNumber, bgcolor=(255, 255, 255)):
- """
- 定义图片大小,验证码长度,背景颜色
- """
- # 创建空白图像
- image = Image.new('RGB', size, bgcolor)
-
- # 创建绘图对象
- draw = ImageDraw.Draw(image)
-
- # 创建font对象
- font = ImageFont.truetype('c:\\windows\\fonts\\Arial.ttf', 48) # 选定一款系统字体
-
- # 生成并计算随机字符的宽度和高度
- text = rand_chars(chrNumber)
- width, height = draw.textsize(text, font)
-
- # 绘制字符串
- x_start = 5
- char_w = width // chrNumber - 2 # 计算每个字符宽度
- for i in range(chrNumber):
- position = (x_start, (size[1]-height)//2+randint(-10, 10)) # 字符坐标, Y坐标上下浮动
- draw.text(xy=position, text=text[i], font=font, fill=rand_color()) # 绘制函数
- x_start += char_w + 1
-
- image.show()
-
-
- # 绘制随机颜色随机位置的干扰像素
- draw_rand_point(size, draw)
- image.show()
-
- # 绘制干扰线
- draw_rand_line(8, size, draw)
- image.show()
-
- # 保存图片
- image.save('Veri_code.jpg')
-
- if __name__ == "__main__":
- # load_image()
- verify_code((200, 100), 6, (255, 255, 255))
运行结果
图片1:绘制6个颜色随机的字符
图片2:加入随机干扰点
图片3: 加入随机干扰线
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。