Python图像库Pillow

PIL(Python Imaging Library Python图像库)是一个强大的图像处理标准库,功能强大却又简单易用。现在的名字叫做Pillow。

安装Pillow

pip3 install pillow

如果你使用的是Anaconda开发环境,自带Pillow库。值得注意的是,导入Pillow库时,库的名称是PIL。下面我们将用Pillow库做一些有意思的事情。

1. 图像手绘效果

from PIL import Image
import numpy as np
 
a = np.asarray(Image.open('./picture.jpg').convert('L')).astype('float')
 
depth = 10. 					#(0-100)
grad = np.gradient(a)				#取图像灰度的梯度值
grad_x, grad_y = grad 				#分别取横纵图像梯度值
grad_x = grad_x*depth/100.
grad_y = grad_y*depth/100.
A = np.sqrt(grad_x**2 + grad_y**2 + 1.)
uni_x = grad_x/A
uni_y = grad_y/A
uni_z = 1./A
 
vec_el = np.pi/2.2 			        #光源的俯视角度,弧度值
vec_az = np.pi/4. 			        #光源的方位角度,弧度值
dx = np.cos(vec_el)*np.cos(vec_az) 	        #光源对x 轴的影响
dy = np.cos(vec_el)*np.sin(vec_az) 	        #光源对y 轴的影响
dz = np.sin(vec_el) 			        #光源对z 轴的影响
 
b = 255*(dx*uni_x + dy*uni_y + dz*uni_z) 	#光源归一化
b = b.clip(0,255)
 
im = Image.fromarray(b.astype('uint8')) 	#重构图像
im.save('./picture2.jpg')

图像效果如下:

2.生成数字验证码

from PIL import Image, ImageDraw, ImageFont, ImageFilter
import random
 
#随机字母:
def rndChar():
    return chr(random.randint(48, 57))
 
#随机颜色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('ariblk.ttf', 40)
#创建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')

得到的数字验证码如下图: