首页 > Python基础教程 >
-
爬虫(十三):PIL模块
1. PIL模块
在爬虫(十二):图形验证码的识别、滑动验证码的识别(B站滑动验证码)中我留下了一个悬念,为什么安装的是pillow模块,而不是PIL模块。这是因为PIL是python2的产物,它并没有跟随python的发展而发展。所以有大佬为此特意写了一个针对python3的pillow模块。所以,如果需要安装python3对应的PIL,应该选择安装pillow。
1.1 导入Image模块
我们一般只使用PIL模块中的Image模块,所以我这就只讲解Image模块了。
安装PIL模块:
pip install pillow -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
导入模块:
- from PIL import Image
1.2 Image模块常用方法
(1) 读取图片
open(url):读取一张图片,参数是图片名。
(2) 显示图片
show():显示一张图片。
案例:
- from PIL import Image
- img = Image.open('xhh.jpg')
- img.show()
结果:
(3) 保存图片
save(image,type):将图像保存为名称为“image”、格式为type格式的图片。
(4) 创建新图片
new(mode,size):创建一张模式为mode、大小为size的图片。
new(mode,size,color):创建一张模式为mode、大小为size、颜色为color的图片。
案例:
- from PIL import Image
- newImg = Image.new("RGBA",(640,480),(255,0,0))
- newImg.save("newImg.png","PNG")
结果:
(5) 两张图片相加
blend(img1,img2,alpha):将img1和img2,这里alpha表示img1和img2的比例参数
(6) 改变图像大小
resize(size):将图像修改为size大小
案例1:
- from PIL import Image
- img1 = Image.open("xhh.jpg")
- img2 = Image.open("xhh2.jpg")
- #img = img1×0.8+img2×0.2
- img = Image.blend(img1,img2,0.2)
- img.show()
结果:
为什么会报错呢?因为他们的大小不一样,而这个报错在官方是没有解释的。
案例2:
- from PIL import Image
- img1 = Image.open("xhh.jpg")
- img1 = img1.resize((256,256))
- img2 = Image.open("xhh2.jpg")
- img2 = img2.resize((256,256))
- #img = img1×0.7+img2×0.3
- img = Image.blend(img1,img2,0.3)
- img.show()
结果:
(7) 点操作
point(function):这个function接受一个参数,且对图片中的每一个点执行这个函数。
案例:
- from PIL import Image
- img = Image.open("xhh.jpg")
- img.show()
- out=img.point(lambda i:i*1.5)#对每个点进行50%的加强
- out.show()
这前后对比明显吧。
(8) 查看图像信息
- from PIL import Image
- img = Image.open("xhh.jpg")
- print(img.format)
- print(img.size)
- print(img.mode)
结果:
(9) 图片裁剪
crop(box):设置要裁剪的区域范围box。
案例:
- from PIL import Image
- img = Image.open("xhh.jpg")
- box=(100,100,500,500)
- #设置要裁剪的区域
- region=img.crop(box) #此时,region是一个新的图像对象。
- region.show()
结果:
(10) 图像黏贴(合并)
paste(region,box):黏贴box大小的region图像到原来的图片对象中。
案例:
- from PIL import Image
- img1 = Image.open("xhh.jpg")
- img2 = Image.open("xhh2.jpg")
- img1.paste(img2,(0,0))
- img1.show()
结果:
(11) 通道分离
split():分割成三个通道,此时r,g,b分别为三个图像对象。
(12) 通道合并
merge("RGB",(b,g,r)):将b,r两个通道进行翻转。
案例:
- from PIL import Image
- img1 = Image.open("xhh.jpg")
- img1.show()
- r, g, b = img1.split()
- img2 = Image.merge("RGB", (b, g, r))
- img2.show()