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()

结果:

(13) 旋转图像

rotate(angle):逆时针旋转angle度。

(14) 图像转换

案例:

from PIL import Image

img = Image.open("xhh.jpg")
#左右对换
out1 = img.transpose(Image.FLIP_LEFT_RIGHT)
out1.show()
#上下对换
out2 = img.transpose(Image.FLIP_TOP_BOTTOM)
out2.show()

结果:

(15) 图像类型转换

convert(mode):将图像转换成mode类型。

PIL的九种不同模式:1,L,P,RGB,RGBA,CMYK,YCbCr,I,F。

常用的两种:

1.模式”1”
为二值图像,非黑即白。但是它每个像素用8个bit表示,0表示黑,255表示白。下面我们将lena图像转换为“1”图像。
from PIL importImage
img = Image.open(“E:\image\myimg.jpg”)
img_1=img.convert(“1”)
2.模式“L”
为灰色图像,它的每个像素用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度。在PIL中,从模式“RGB”转换为“L”模式是按照下面的公式转换的:
L = R * 299/1000 + G * 587/1000+ B * 114/1000

(16) 获取某个像素位置的值

getpixel(coordinate):coordinate为(x,y)形式的值。

(17) 修改某个像素位置的值

putpixel(coordinate,color):修改像素位置coordinate的颜色color的值。

案例:

from PIL import Image

img = Image.open("xhh.jpg")

print(img.size)
print(img.getpixel((4, 4))) width = img.size[0] # 长度
height = img.size[1] # 宽度 for w in range(0, width):
for h in range(0, height):
data = img.getpixel((w, h)) # 得到像素值
if (data[0] <= 170 and data[1] <= 170 and data[2] <= 170):
img.putpixel((w, h), (0, 0, 255)) # 则这些像素点的颜色改成大红色 img.show()

结果:

爬虫(十三):PIL模块的更多相关文章

  1. 爬虫四 selenium模块

    一.介绍 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作, ...

  2. python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

    本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...

  3. Python爬虫之urllib模块2

    Python爬虫之urllib模块2 本文来自网友投稿 作者:PG-55,一个待毕业待就业的二流大学生. 看了一下上一节的反馈,有些同学认为这个没什么意义,也有的同学觉得太简单,关于Beautiful ...

  4. Python爬虫之urllib模块1

    Python爬虫之urllib模块1 本文来自网友投稿.作者PG,一个待毕业待就业二流大学生.玄魂工作室未对该文章内容做任何改变. 因为本人一直对推理悬疑比较感兴趣,所以这次爬取的网站也是平时看一些悬 ...

  5. asynicio模块以及爬虫应用asynicio模块(高性能爬虫)

    一.背景知识 爬虫的本质就是一个socket客户端与服务端的通信过程,如果我们有多个url待爬取,只用一个线程且采用串行的方式执行,那只能等待爬取一个结束后才能继续下一个,效率会非常低. 需要强调的是 ...

  6. Python使用PIL模块生成随机验证码

    PIL模块的安装 pip3 install pillow 生成随机验证码图片 import random from PIL import Image, ImageDraw, ImageFont fro ...

  7. 第三百二十六节,web爬虫,scrapy模块,解决重复ur——自动递归url

    第三百二十六节,web爬虫,scrapy模块,解决重复url——自动递归url 一般抓取过的url不重复抓取,那么就需要记录url,判断当前URL如果在记录里说明已经抓取过了,如果不存在说明没抓取过 ...

  8. 第三百二十五节,web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签

    第三百二十五节,web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签 标签选择器对象 HtmlXPathSelector()创建标签选择器对象,参数接收response回调的html对象需 ...

  9. 第三百二十四节,web爬虫,scrapy模块介绍与使用

    第三百二十四节,web爬虫,scrapy模块介绍与使用 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了 ...

随机推荐

  1. OpenCV之Core组件进阶

    颜色空间缩减 利用C++类型转换时向下取整操作,实现定义域内颜色缩减.表达式如下 Inew = (Iold/10)*10 简单的颜色空间缩减算法可由以下两步组成: (1)遍历图像矩阵的每个元素 (2) ...

  2. Python记通用列表操作之切片!

    ______________________________________除使用索引(indexing)来访问单个元素外,还可使用切片 (slicing) 来访问特定范围内的元素. 切片适用于提取序 ...

  3. 浅谈Power Signoff

    Power Analysis是芯片设计实现中极重要的一环,因为它直接关系到芯片的性能和可靠性.Power Analysis 需要Timing Analysis 产生包含频率.transition 等时 ...

  4. 在页面跳转的时候,在跳转后的页面中使用js 获取到 页面跳转的url中携带的参数。

    common.js代码 //获取URL中的参数..等等function getQueryString(name){var reg = new RegExp("(^|&)"+ ...

  5. 关于使用ssm与spring时,配置tomcat 虚拟目录( doBase )中的一些坑

    一.使用SSM需要 配置虚拟目录时 tomcat的配置 在tomcat server.xml的<HOST></HOST>中加入以下内容 在配置完成之后,当我们访问URL  为  ...

  6. stm32f103中freertos的tasks基本使用案例及备忘

    基本实例   freetos的在stm32中使用踩了一些坑,事情做完了,就 做个备忘,希望能给后面的人一些借鉴. 先给出一个实际的例子吧. 启动代码 void task_create(void) { ...

  7. 265. 粉刷房子 II

    Q: A: 首先这题可以和粉刷房子这题一样解法,对于i号房子,遍历k种颜色,对于每一种,都去找i-1号房子除该颜色之外的最小花费.但上一题是3种颜色,总复杂度O(N),这题k种颜色,复杂度O(NK^2 ...

  8. docker互联机制实现便捷互访

    何为容器互联 & 为何需要容器互联 容器的互联是一种让多个容器中应用进行快速交互的方式,它会在源和接收容器之间创建连接关系,接收容器可以通过容器名快速访问到源容器,而不用指定具体的 ip 地址 ...

  9. 1+x证书Web 前端开发初级——理论考试(试卷1)

    1+x证书Web 前端开发初级——理论考试(试卷1) 一.单选题(每小题 2 分,共 30 小题,共 60 分) 1.HTML 语言中,设置表格中文字与边框距离的标签是() A.<table b ...

  10. vue 实现上一周、下一周切换功能

    效果图: html 显示部分: js 显示部分: preNextBtn(val){ let _this = this; this.tableList = []; //数据重置为空 _this.show ...