VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 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

导入模块:


	
  1. from PIL import Image

1.2 Image模块常用方法

(1) 读取图片

open(url):读取一张图片,参数是图片名。

(2) 显示图片

show():显示一张图片。

案例:


	
  1. from PIL import Image
  2.  
  3. img = Image.open('xhh.jpg')
  4. img.show()

结果:

(3) 保存图片

save(image,type):将图像保存为名称为“image”、格式为type格式的图片。

(4) 创建新图片

new(mode,size):创建一张模式为mode、大小为size的图片。

new(mode,size,color):创建一张模式为mode、大小为size、颜色为color的图片。

案例:


	
  1. from PIL import Image
  2.  
  3. newImg = Image.new("RGBA",(640,480),(255,0,0))
  4. newImg.save("newImg.png","PNG")

结果:

(5) 两张图片相加

blend(img1,img2,alpha):将img1和img2,这里alpha表示img1和img2的比例参数 

(6) 改变图像大小

resize(size):将图像修改为size大小

案例1:


	
  1. from PIL import Image
  2.  
  3. img1 = Image.open("xhh.jpg")
  4. img2 = Image.open("xhh2.jpg")
  5. #img = img1×0.8+img2×0.2
  6. img = Image.blend(img1,img2,0.2)
  7. img.show()

结果:

为什么会报错呢?因为他们的大小不一样,而这个报错在官方是没有解释的。

案例2:


	
  1. from PIL import Image
  2.  
  3. img1 = Image.open("xhh.jpg")
  4. img1 = img1.resize((256,256))
  5. img2 = Image.open("xhh2.jpg")
  6. img2 = img2.resize((256,256))
  7. #img = img1×0.7+img2×0.3
  8. img = Image.blend(img1,img2,0.3)
  9. img.show()

结果:

(7) 点操作 

point(function):这个function接受一个参数,且对图片中的每一个点执行这个函数。

案例:


	
  1. from PIL import Image
  2.  
  3. img = Image.open("xhh.jpg")
  4. img.show()
  5. out=img.point(lambda i:i*1.5)#对每个点进行50%的加强
  6. out.show()

这前后对比明显吧。 

(8) 查看图像信息


	
  1. from PIL import Image
  2.  
  3. img = Image.open("xhh.jpg")
  4. print(img.format)
  5. print(img.size)
  6. print(img.mode)

结果:

(9) 图片裁剪

crop(box):设置要裁剪的区域范围box。

案例:


	
  1. from PIL import Image
  2.  
  3. img = Image.open("xhh.jpg")
  4. box=(100,100,500,500)
  5. #设置要裁剪的区域
  6. region=img.crop(box) #此时,region是一个新的图像对象。
  7. region.show()

结果:

(10) 图像黏贴(合并)

paste(region,box):黏贴box大小的region图像到原来的图片对象中。

案例:


	
  1. from PIL import Image
  2.  
  3. img1 = Image.open("xhh.jpg")
  4. img2 = Image.open("xhh2.jpg")
  5. img1.paste(img2,(0,0))
  6. img1.show()

结果:

(11) 通道分离

split():分割成三个通道,此时r,g,b分别为三个图像对象。

(12) 通道合并

merge("RGB",(b,g,r)):将b,r两个通道进行翻转。

案例:


	
  1. from PIL import Image
  2.  
  3. img1 = Image.open("xhh.jpg")
  4. img1.show()
  5. r, g, b = img1.split()
  6. img2 = Image.merge("RGB", (b, g, r))
  7. img2.show()