关于PIL库的一些概念
关于PIL库的一些概念
pil能处理的图片类型
pil可以处理光栅图片(像素数据组成的的块)。
通道
一个图片可以包含一到多个数据通道,如果这些通道具有相同的维数和深度,Pil允许将这些通道进行叠加
模式
| 1 | 1位像素,黑和白,存成8位的像素 |
| L | 8位像素,黑白 |
| P | 8位像素,使用调色板映射到任何其他模式 |
| RGB | 3×8位像素,真彩 |
| RGBA | 4×8位像素,真彩+透明通道 |
| CMYK | 4×8位像素,颜色隔离 |
| YCbCr | 3×8位像素,彩色视频格式 |
| I | 32位整型像素 |
| F | 32位浮点型像素 |
尺寸
通过图片对象的size属性可以得到图片的尺寸,结果这是一个二元组,包含水平和垂直方向上的像素数。
坐标
Pil采取左上角为(0,0)的坐标系统
调色板
mode("P")为每个像素定义具体的颜色值
图片信息
可以通过info属性读取一张图片的附加信息,这个与图片的格式有关。
滤镜
在对图片的几何操作中可能会将多个输入像素映射到单个的输出像素,pil提供4种不同的采样滤镜(在目前的版本中,后续的版本可能支持更多)
| NEAREST | 最近 |
| BILINEAR | 双线型 |
| BICUBIC | 双三次插值 |
| ANTIALIAS | 平滑 |
在RGB模式下,每个图片由三个通道叠加而成,每个模式下为一个灰度图,当有一个调色板来调色的时候,这三张灰度图的叠加即可合成3*8位(每个像素)的一个真彩图片。pil库中,图片之间的模式(mode)可以转化。下面给出一些简单的例子,例子中的所有图片均来自于国家地理的官网,为了使得文档比较短小,每个图片均使用Pil缩放成1/2大小,如有侵权嫌疑,请尽快联系,我会删除这些图片。
所有的图片操作必须有一个操作对象,Pil提供open(filename)进行这个过程
打开图片
1.导入pil的Image模块
2.使用open(filename)打开文件,返回一个image对象
- im = Image.open('filename')
此后,一切关于图片的操作均基于这个对象。

打开后,我们可以查看一些图片信息,如im.format, im.size, im.mode等。调用im.show()会在图片查看工具中显示当前操作的image对象,这个跟个人的系统有关系,我系统中默认是用Windows Picture and Fax Viewer打开的。这个方法用来查看临时的图片效果。
读写图片
pil中转换图片格式非常简单(转换图片模式是另一个概念,不要混淆),只需要调用img.save(filename)即可比如有一个bmp(位图)图片,使用img = Image.open('file.bmp')打开后,只需要img.save('file.jpg')即可转换。不过一般情况下,save(filename)是不用做这个用途的,通常,save用以保存一个临时的image对象到硬盘。而转换工作由一个功能更为强大的convert()方法来完成。
拷贝,粘贴,合并
- box = (100,100,500,500)#设置要拷贝的区域
- #将im表示的图片对象拷贝到region中,大小为(400*400)像素。这个region可以用来后续的操作(region其实就是一个Image对象),box变量是一个四元组(左,上,右,下)。
- region = im.crop(box)
- region = region.transpose(Image.ROTATE_180)#从字面上就可以看出,先把region中的Image反转180度,然后再放回到region中。
- im.paste(region, box)#粘贴box大小的region到原先的图片对象中。

前面说过,每一个RGB都是由三个通道的灰度图叠加的,所以pil提供了将这三个通道分离的方法
- r,g,b = im.split()#分割成三个通道
- r.show()
- g.show()
- b.show()
- im = Image.merge("RGB", (b, g, r))#将b,r两个通道进行翻转。

红色通道的灰度图

绿色通道的灰度图

蓝色通道的灰度图

互换红蓝通道后的合成图
几何转变
几何转变提供resize,rotate等方法,用以重定义图片大小,对图片进行旋转等操作,在实际应用中比较广泛。
如
- out = img.resize((128, 128))#resize成128*128像素大小。
- out = img.rotate(45)#逆时针旋转45度

逆时针45度

镜面效果,左右翻转
transpose()方法预定义了一些旋转方式,如
左右反转,上下翻转,逆时针旋转(90,180,270)度等,非常方便,rotate()和transpose()方法在表现上没有任何不同。
图片加强
滤镜
ImageFilter模块提供了很多预定义的图片加强滤镜。
比如一个常用的滤镜,细节(detail滤镜)
- import ImageFilter
- out = im.filter(ImageFilter.DETAIL)

直接操作像素点
不但可以对每个像素点进行操作,而且,每一个通道都可以独立的进行操作。比如,将每个像素点的亮度(不知道有没有更专业的词)增大20%
- out = img.point(lambda i : i * 1.2)#注意这里用到一个匿名函数(那个可以把i的1.2倍返回的函数)

对每个点都做20%的增强
如上边的那个例子,我们可以将一个RGB模式的图分离成三个通道的层
- r,g,b = img.split()#神奇而又强大的python语法
然后对一个通道进行加强或减弱操作,完成后我们又可以使用Merge将通道合并,从而改变图片的色调(冷暖色调的互换)等。
更高级的图片加强,可以使用ImageEnhance模块,其中包含了大量的预定义的图片加强方式。
- import ImageEnhance
- enh = ImageEnhance.Contrast(im)
- enh.ehhance(1.5).show("50% more contrast")

读写图片的更多方式
通常,我们使用open方法进行图片的打开操作。但是这不是唯一的方式。完全可以跟python的IO整合起来。如
- fp = open("file.jpg", "rb")
- im = Image.open(fp)
甚至,你可以从一个字符串中读出图片数据来(python真是神奇啊)。
- import StringIO
- img = Image.open(StringIO.StringIO(buffer))
(文中很多内容来自pil的handbook,但是原手册比较学院派,没有一张图片来进行说明,因此不免枯燥,我给每个小例子都加上一个真实的图片作为说明,希望看起来不那没抽象。)
当然,PIL的功能远不止这些,由于篇幅原因,我这次先写这么多吧,后面会给出PIL中各个模块中函数的详细使用说明,同时尽量配以实图来说明。
关于PIL库的一些概念的更多相关文章
- PIL库 (Pillow)
PIL基础 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important ...
- PIL库图像处理
PIL有如下几个模块 Image模块.ImageChops模块.ImageCrackCode模块 ImageDraw模块.ImageEnhance模块.ImageFile模块 ImageFileIO模 ...
- Python 之 使用 PIL 库做图像处理
http://www.cnblogs.com/way_testlife/archive/2011/04/17/2019013.html Python 之 使用 PIL 库做图像处理 1. 简介. 图像 ...
- 关于python下安装PIL库遇到的问题及解决办法
关于python下安装PIL库遇到的问题及解决办法 关于python下安装PIL库遇到的问题及解决办法 :在下面这个网址下载pipllow(a replacement for PIL) www.lfd ...
- 一秒钟带你走进P图世界-----(python)PIL库的使用
python-----PIL库的使用 一.什么是PIL库 1.PIL(Python Image Library)库是python语言的第三方库,具有强大的图像处理能力,不仅包含了丰富的像素.色彩操作功 ...
- PIL库自我学习总结及应用(美白,磨皮,搞笑图片处理)
Hello!今天我们来学习一下这个神奇的图片处理的第三方函数库——PIL库 (本blog部分图片及代码来自网络) 这是一个支持图像存储.显示和处理的函数库,它能够处理几乎所有图像格式,可以完成对图像的 ...
- python之PIL库(Image模块)
PIL(Python Image Library)是python的第三方图像处理库,PIL的功能非常的强大,几乎被认定是Python的官方图像处理库了. 由于PIL仅支持到python2.7于是一群志 ...
- 纯代码系列:Python实现验证码图片(PIL库经典用法用法,爬虫12306思路)
现在的网页中,为了防止机器人提交表单,图片验证码是很常见的应对手段之一.这里就不详细介绍了,相信大家都遇到过. 现在就给出用Python的PIL库实现验证码图片的代码.代码中有详细注释. #!/usr ...
- 玩转PIL库
1.安装pillow库: 在cmd下,输入简单的命令: pip install pillow 即可安装pillow库. 2.PIL库的简介: 1. PIL库主要有2个方面的功能: (1) 图像归档: ...
随机推荐
- Ubuntu lnmp安装记录
参考了: Ubuntu 14.04 LTS 安装 LNMP Nginx\PHP5 (PHP-FPM)\MySQL 在访问 info.php的时候,我显示的是502错误.后面我参考了: Ubuntu15 ...
- ASP根据IP来判断跳转页面
真正IP的取得应该这样: 程序代码 ip = Request.ServerVariables("HTTP_X_FORWARDED_FOR") if ip = "" ...
- NDIS小鱼防火墙之拦截指定QQ登录
因为QQ窗口是自绘窗口,gif录制软件不能正常录制到窗口,我就截图功能把窗口显示出来. 下面我的演示,我登录2个QQ号,一个被我指定拦截,让他不能够登录.另一个却可以正常的工作..看我的COOL的演示 ...
- 牛客_剑指offer_重建二叉树,再后续遍历_递归思想_分两端
总结: 重建二叉树:其实就是根据前序和中序重建得到二叉树,得到后续,只要输出那边设置输出顺序即可 [编程题]重建二叉树 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的 ...
- 轮子来袭 vJine.Core Orm 之 02_代码生成
1.下载并安装动软代码生成器: 2.下载vJine.Core.Orm模板: 3.解压模本文件并复制到如下的动软代码生成器模板目录: 4.打开动软代码生成器会看到模板已识别加载: 5.选择模板代码批量生 ...
- 详解Windows 7系统中IE8/IE9/IE10三个版本的关系(转)
今年(2013)年初,微软开放了姗姗来迟的 IE10 for Windows 7 版本下载.至此,Windows 7 平台上可以运行三个 IE 浏览器版本.虽然 Windows 与 IE 经历了诸多版 ...
- 往xml中更新节点
/* System.out.println("2323"); DocumentBuilderFactory factory = DocumentBuilderFactory.new ...
- 08_XML的解析_SAX解析
[对比SAX解析和DOM解析] * 在使用DOM解析XMl文档时,需要读取整个XML文档,在内存中架构代表整个DOM树的DOcument对象,从而对XML文档进行操作,在这种情况下,如果XML文档特别 ...
- java培训(1-4节课)
课程安排:JavaEE方向(控制台程序,GUI程序,Web程序,手机程序)(dos命令是控制台程序:QQ是GUI程序,放在计算机上:QQ空间是Web程序,放在腾讯公司) 讲课的13本教材:C语言,Ja ...
- OpenJudge/Poj 1207 The 3n + 1 problem
1.链接地址: http://bailian.openjudge.cn/practice/1207/ http://poj.org/problem?id=1207 2.题目: 总时间限制: 1000m ...