`
abruzzi
  • 浏览: 452457 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

python图形处理库PIL(Python Image Library)的介绍

阅读更多

关于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中各个模块中函数的详细使用说明,同时尽量配以实图来说明。

  • 大小: 36.6 KB
  • 大小: 108.5 KB
  • 大小: 33.3 KB
  • 大小: 31.3 KB
  • 大小: 33.8 KB
  • 大小: 34.6 KB
  • 大小: 40.8 KB
  • 大小: 35.8 KB
  • 大小: 36.6 KB
  • 大小: 36.1 KB
  • 大小: 46.6 KB
  • 大小: 36.6 KB
  • 大小: 34.2 KB
分享到:
评论
9 楼 ddkangfu 2009-01-22  
好文章,强烈期待后续作品!
8 楼 yingwuhahahaha 2009-01-19  
abruzzi 写道
yingwuhahahaha 写道
前一段也学过一点pil,不过还是不太会用.
不知楼主知不知道用pil怎样能把 PNG32 格式的图片 转换成 PNG8 格式的吗?

前提是要能在旋转或翻转的情况下保持图片的透明度.

我前一段时间为了让PNG图片的透明兼容IE6,用PIL弄了两天,结果没搞出来.

图片转成PNG8后透明就没了,如果楼主试过,还请赐教.


赐教两字,愧不敢当。呵呵
IE只支持PNG8的index色彩透明度,不支持alpha透明。可能你遇到的问题是这个原因。IE6怎么还在用?V7已经是正式版了。我一直在FF下工作,对IE还真是不太清楚。

恩,我知道IE6只支持8位索引透明色的PNG,所以我想用PIL转成那样的,结果没成功.
需求是客户定的,哎,我自己也不想用IE6.实在不行就手工转gif了.我用PIL把PNG32转成gif还是不透明.
7 楼 abruzzi 2009-01-13  
yingwuhahahaha 写道
前一段也学过一点pil,不过还是不太会用.
不知楼主知不知道用pil怎样能把 PNG32 格式的图片 转换成 PNG8 格式的吗?

前提是要能在旋转或翻转的情况下保持图片的透明度.

我前一段时间为了让PNG图片的透明兼容IE6,用PIL弄了两天,结果没搞出来.

图片转成PNG8后透明就没了,如果楼主试过,还请赐教.


赐教两字,愧不敢当。呵呵
IE只支持PNG8的index色彩透明度,不支持alpha透明。可能你遇到的问题是这个原因。IE6怎么还在用?V7已经是正式版了。我一直在FF下工作,对IE还真是不太清楚。
6 楼 yingwuhahahaha 2009-01-13  
前一段也学过一点pil,不过还是不太会用.
不知楼主知不知道用pil怎样能把 PNG32 格式的图片 转换成 PNG8 格式的吗?

前提是要能在旋转或翻转的情况下保持图片的透明度.

我前一段时间为了让PNG图片的透明兼容IE6,用PIL弄了两天,结果没搞出来.

图片转成PNG8后透明就没了,如果楼主试过,还请赐教.
5 楼 bluecrystal 2009-01-12  
写得通俗易懂,赞一个
4 楼 rockjava 2009-01-12  
<div class='quote_title'>abruzzi 写道</div>
<div class='quote_div'>
<p>
jinhao7773 写道
写得不错,不过这部分代码似乎有点问题:<br/>import ImageEnhance   <br/>enh = ImageEnhance.Contrast(im)   <br/>enh.ehhance(1.5).show("50% more contrast")  <br/>
<br/><br/>有什么问题?我在我的机器上测试过了啊,如果你说的是这句:</p>
<pre name='code' class='python'>enh = ImageEnhance.Contrast(im)   </pre>
<p>im是一个Image对象,即通过Image.open(file)方法返回的一个图片对象。</p>
</div>
<p>enh.ehhance(1.5).show("50% more contrast") </p>
<p>这句话错了。</p>
<p>应该是</p>
<p>enh.enhance(1.5).show("50% more contrast") </p>
3 楼 abruzzi 2009-01-12  
<p>
jinhao7773 写道
写得不错,不过这部分代码似乎有点问题:<br/>import ImageEnhance   <br/>enh = ImageEnhance.Contrast(im)   <br/>enh.ehhance(1.5).show("50% more contrast")  <br/>
<br/><br/>有什么问题?我在我的机器上测试过了啊,如果你说的是这句:</p>
<pre name='code' class='python'>enh = ImageEnhance.Contrast(im)   </pre>
<p>im是一个Image对象,即通过Image.open(file)方法返回的一个图片对象。</p>
2 楼 jinhao7773 2009-01-12  
写得不错,不过这部分代码似乎有点问题:
import ImageEnhance  
enh = ImageEnhance.Contrast(im)  
enh.ehhance(1.5).show("50% more contrast") 
1 楼 biaoflying 2009-01-12  
      

相关推荐

    Python图像处理库指南Python Imaging Library(PIL) Guide

    ### Python 图像处理库指南:Python Imaging Library (PIL) #### 一、引言 Python Imaging Library(简称PIL)是Python编程语言中一个强大的图像处理库,它为用户提供了一系列的功能来创建、修改以及转换各种格式...

    python图像处理库PIL介绍.pdf

    Python 图像处理库 PIL 介绍 Python Imaging Library(PIL)是 Python 中最常用的图像处理库,目前版本为 1.1.7。PIL 库中一个非常重要的类是 Image 类,通过这个类可以创建实例来直接载入图像文件,读取处理过的...

    Python图像处理库PIL的ImageGrab模块介绍详解

    PIL(Python Imaging Library),也称为Pillow,是Python中最常用的图像处理库之一。ImageGrab作为PIL库中的一个模块,主要用于捕获屏幕图像或将剪贴板内容转换为图像。此模块非常适合进行屏幕捕获操作,并且广泛...

    Python第三方图像处理库PIL

    Python第三方图像处理库PIL(Python Imaging Library)是Python编程语言中的一个强大工具,用于处理各种图像文件。它提供了一系列的函数和类,允许开发者进行图像处理、编辑、合成、色彩转换以及基本的图像分析任务...

    python使用PIL库读取图片的像素值

    PIL 库(Python Imaging Library)是一个功能强大的图像处理库,可以用来读取、处理和保存图像。通过使用 PIL 库,我们可以读取图片的像素值并对其进行处理。 读取图片的像素值 使用 PIL 库读取图片的像素值可以...

    python图像处理库PIL介绍.doc

    Python中的PIL(Python Imaging Library)是一个强大的图像处理库,广泛应用于图像的读取、编辑和创建。目前的稳定版本是1.1.7,你可以从官方或相关资源网站下载并获取更多的学习材料。 1. **Image类**: PIL库的...

    Python图像处理.pdf

    PythonWare 公司提供了免费的图像处理工具包 PIL(Python Image Library),该软件包提供了基本的图像处理功能,如改变图像大小、旋转图像、图像格式转换、色场空间转换、图像增强、直方图处理、插值和滤波等等。...

    python图像处理,python图像处理库,Python

    Python中最常用的图像处理库有PIL(Python Imaging Library)及其分支Pillow、OpenCV、matplotlib和scikit-image。其中,Pillow是最广泛使用的库,它提供了一个简单的接口来处理图像,支持多种图像文件格式。OpenCV...

    python安装32位的 PIL-1.1.7.win32-py2.7.exe

    在Python中处理图像时,PIL库提供了一些核心类,例如Image用于加载和处理图像,以及ImageFilter用于应用滤镜效果。以下是一些基本操作示例: ```python from PIL import Image # 打开一个图像文件 img = Image.open...

    python图形处理11

    首先,PIL(Python Imaging Library)是Python中最早的图像处理库,它提供了广泛的图像处理功能,如打开、保存、显示图像,以及调整尺寸、旋转、裁剪等。在"python图形处理11"中,可能会介绍如何使用PIL处理复杂的...

    pil python2.7 windows安装版

    PIL(Python Imaging Library)是Python的一个图像处理库,它提供了大量的图像处理功能,包括打开、修改、保存多种图像文件格式,以及进行色彩转换、图像裁剪、旋转、滤波等操作。在Python 2.7版本中,PIL是进行图像...

    Python-使用pythonPIL库将一张照片切分为9张图

    PIL(Python Imaging Library)是Python的一个重要图像处理库,提供了丰富的功能,包括读取、操作和保存多种图像文件格式。本教程将详细讲解如何使用Python的PIL库将一张照片切分为9张等大小的小图。 首先,确保你...

    python pil库

    Python的PIL库,全称为Python Imaging Library,是Python中用于图像处理的核心库。它提供了大量的功能,包括读取、操作和保存各种图像文件格式,以及进行色彩转换、图像滤波、几何变换等图像处理任务。PIL库是Python...

    Mac python PIL

    PIL(Python Imaging Library)是Python的一个图像处理库,它提供了大量的图像处理功能,包括打开、操作和保存多种文件格式。在Mac操作系统上使用Python PIL库,用户可以进行图片的裁剪、旋转、颜色转换、滤镜应用等...

    Python图像处理库Pillow入门

    Pillow是Python里的图像处理库(PIL:Python Image Library),提供了了广泛的文件格式支持,强大的图像处理能力,主要包括图像储存、图像显示、格式转换以及基本的图像处理操作等。

    Python图像处理库PIL中图像格式转换的实现

    在Python的图像处理领域,PIL(Python Imaging Library)是一个不可或缺的工具,它提供了丰富的功能,包括图像读取、修改和保存等。本文将深入探讨如何利用PIL库进行图像格式转换,以及如何通过convert()函数改变...

Global site tag (gtag.js) - Google Analytics