转载:http://www.cnblogs.com/way_testlife/archive/2011/04/20/2022997.html
 

本文是节选自 PIL handbook online 并做了一些简单的翻译

只能保证自己看懂,不保证翻译质量。欢迎各位给出意见。

------------------------------------------------------

Image 模块提供了一个同名类(Image),也提供了一些工厂函数,包括从文件中载入图片和创建新图片。例如,以下的脚本先载入一幅图片,将它旋转 45 度角,并显示出来:

1 >>>from PIL import Image
2  >>>im = Image.open("j.jpg")
3  >>>im.rotate(45).show()

下面这个脚本则创建了当前目录下所有以 .jpg 结尾的图片的缩略图。


1 from PIL import Image
2  import glob, os
3
4 size = 128, 128
5  for infile in glob.glob("*.jpg"):
6 file, ext = os.path.splitext(infile)
7 im = Image.open(infile)
8 im.thumbnail(size, Image.ANTIALIAS)
9 im.save(file + ".thumbnail", "JPEG")

Image 类中的函数

0.    new : 这个函数创建一幅给定模式(mode)和尺寸(size)的图片。如果省略 color 参数,则创建的图片被黑色填充满,如果 color 参数是 None 值,则图片还没初始化。


1 Image.new( mode, size ) => image
2 Image.new( mode, size, color ) => image

1.    open : 打开并识别所提供的图像文件。不过,使用这函数的时候,真正的图像数据在你进行数据处理之前并没有被读取出来。可使用 load 函数进行强制加载。 mode 参数可以省略,但它只能是 "r" 值。


1 Image.open( infile ) => image
2 Image.open( infile, mode ) => image

2.    blend : 使用两幅给出的图片和一个常量 alpha 创建新的图片。两幅图片必须是同样的 size 和 mode 。


1 Image.blend( image1, image2, alpha ) => image
2  # 结果 与 运算过程
3 # out = image1 * ( 1.0 - alpha ) + image2 * alpha

3.    composite : 使用两幅给出的图片和一个与 alpha 参数相似用法的 mask 参数,其值可为:"1", "L", "RGBA" 。两幅图片的 size 必须相同。


1 Image.composite( image1, image2, mask ) => image

4.    eval : 使用带一个参数的函数作用于给定图片的每一个像素。如果给定的图片有超过一个的 频段(band),则该函数也会作用于每一个频段。注意,该函数是每一个像素计算一次,所以不能使用一些随机组件或其他的生成器。


1 Image.eval( image, function ) => image

5.    frombuffer : (PIL 1.1.4 中新添加的)使用标准 "raw" 解码器在像素数据或是对象缓存中创建一个图像副本。不是所有的模式都支持这种用法。支持的 mode 有"L", "RGBX", "RGBA", "CMYK"。


Image.frombuffer( mode, size, data ) => image

6.    fromstring : 注意,这个函数只对像素数据进行解码,而不是一整张图片。如果你有一整张字符串格式的图片,使用 StringIO 对其进行包装并用 open 函数载入它。


1 # 使用字符串类型的像素数据和标准解码器 "raw" 来创建图像
2  Image.fromstring( mode, size, data ) => image
3
4  # 同上。不过允许你使用其他 PIL 支持的像素解码器。
5  Image.fromstring( mode, size, data, decoder, parameters ) => image

7.    merge : 使用一系列单一频段(band)的图像来创建新的一幅图像。频段是以一些图像组成的元组或列表,所有的 band 必须有相同大小的 size 。


1 Image.merge( mode, bands ) =>image

Image 类中的方法

0.    convert : 返回一个转换后的图像的副本。


1 # If mode is omitted, a mode is chosed so that all information in the image and the palette can be representedwithout a palette .
2 # when from a colour image to black and white, the library uses the ITU-R 601-2 luma transfrom:
3 # L = R * 299/1000 + G * 587/1000 + B * 114/1000
4  im.convert( mode ) => image
5
6  # Converts an "RGB" image to "L" or "RGB" using a conversion matrix. The matrix is 4- or 16-tuple.
7  im.convert( mode, matrix ) => image

下面是一个例子:转换 RGB 为 XYZ 。


1 rgb2xyz = (
2 0.412453, 0.357580, 0.180423, 0,
3 0.212671, 0.715160, 0.072169, 0,
4 0.019334, 0.119193, 0.950227, 0 )
5 out = im.convert("RGB", rgb2xyz)

1.    copy : 复制图像。如果你希望粘贴一些东西进图像里面的话可以使用这个方法,但仍然会保留原图像。


1 im.copy() => image

2.    crop : 返回图像某个给定区域。box 是一个 4 元素元组,定义了 left, upper, right, lower 像素坐标。使用这个方法的时候,如果改变原始图像,可能会,也可能不会改变裁剪生成的图像。创建一个完全的复制,裁剪复制的时候使用 load 方法。


1 im.crop( box ) => image

3.    draft : 按给出的 mode 和 size 进行配置。可以使用这个方法将彩色JPEG图片转为灰度图。


1 im.draft(mode, size)

4.    filter : 返回图像使用滤波器后的副本。可以看 这里 获取更多有用的滤波器。


1 im.filter( filter ) => image

5.    fromstring : 和前面的函数是一样的功能,不过这个方法是将数据载入到当前图像。


1 im.fromstring( data )
2 im.fromstring( data, decoder, parameters )

6.    getbands : 返回一个元组,包含每一个 band 的名字,比如,在一幅 RGB 格式的图像上使用 getbands 则返回("R", "G", "B")。

getbands 

7.    getbbox : 计算图像边框值,返回一个 4-元组 ,值为(左,上,右,下)。

getbbox 

8.    getcolors : 在 1.1.5 版本中新添加的。返回一个未排序列表,其元素是元组(count, color)。the count is the number of times the corresponding color occurs in the image 。If the maxcolors value is exceeded, the method stops counting and returns None。

getcolors 

9.    getdata : 返回一个图像内容的像素值序列。不过,这个返回值是 PIL 内部的数据类型,只支持确切的序列操作符,包括迭代器和基本序列方法。我们可以通过 list(im.getdata())  为其生成普通的序列。


1 im.getdata() => sequence

10.    getextrema : 返回一个 2-元组 ,值为图像的最小最大值。在当前PIL版本中,仅支持单一频段(single-band)的图像。

getextreme 

11.    getpixel : 返回指定位置的像素,如果所打开的图像是多层次的图片,那这个方法就返回一个元组。


1 im.getpixel( xy ) => value or tuple

12.    histogram : 返回图像直方图,值为像素计数组成的列表。如果有参数 mask ,则返回图像所有部分的直方图。

histogram 

13.    load : 版本 1.1.6 新添加的。load 返回对象的像素值,可以用来修改像素值。

load 

14.    paste : 1). 粘贴新图片至图片中,box 参数可以为 2-元组(upper, left)或是 4-元组(left, upper, right, lower),或者是 None(0, 0)。2). 功能同上。不过是将指定位置填充为某种颜色。

paste 

15.    point :

point 

------------

未完待续。

PIL 中的 Image 模块的更多相关文章

  1. 【笔记】PIL 中的 Image 模块

    Image 模块提供了一个同名类(Image),也提供了一些工厂函数,包括从文件中载入图片和创建新图片.例如,以下的脚本先载入一幅图片,将它旋转 45 度角,并显示出来: 1 >>> ...

  2. Python图像处理库:PIL中Image,ImageDraw等基本模块介绍

    Python图像处理库:PIL中Image,ImageDraw等基本模块介绍 标签: 图像处理PILPYTHON 2016-08-19 10:58 461人阅读 评论(0) 收藏 举报  分类: 其他 ...

  3. Python图像处理库PIL中图像格式转换

    o 在数字图像处理中,针对不同的图像格式有其特定的处理算法.所以,在做图像处理之前,我们需要考虑清楚自己要基于哪种格式的图像进行算法设计及其实现.本文基于这个需求,使用python中的图像处理库PIL ...

  4. Python图像处理库PIL中图像格式转换(一)

    在数字图像处理中,针对不同的图像格式有其特定的处理算法. 所以,在做图像处理之前,我们须要考虑清楚自己要基于哪种格式的图像进行算法设计及事实上现.本文基于这个需求.使用python中的图像处理库PIL ...

  5. 如何在Meteor中使用npm模块?

    首先,请在AtmosphereJs上搜索有无相关的封装包.尽量采用已有的封装包,而不是自己封装. 有两种方法在项目中使用来自npm的模块. 封装为Meteor包并在项目中添加包.使用meteor cr ...

  6. Python中的random模块,来自于Capricorn的实验室

    Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...

  7. Python中的logging模块

    http://python.jobbole.com/86887/ 最近修改了项目里的logging相关功能,用到了python标准库里的logging模块,在此做一些记录.主要是从官方文档和stack ...

  8. Chrome中的Device模块调式响应性设计

    Chrome中的Device模块调式响应性设计 阅读目录 启用Device模块 Device模块设置介绍 自定义预设介绍 查看media queries 触发触摸事件 回到顶部 启用Device模块 ...

  9. Python中的random模块

    Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...

随机推荐

  1. 什么是IntentService?有何优点?

    一.IntentService 简介 IntentService 是 Service 的子类,比普通的 Service 增加了额外的功能.先看 Service 本身存在两个问题:Service 不会专 ...

  2. c#端口扫描器wpf+socket

    布局如下 <Window x:Class="PortTest.MainWindow" xmlns="http://schemas.microsoft.com/win ...

  3. python中unicode utf-8的互换

    比较简单明了,直接上例子 # -*- coding: utf-8 -*- t0 = u'测试' #u'\u6d4b\u8bd5' t1 = '测试' #'\xe6\xb5\x8b\xe8\xaf\x9 ...

  4. 灰度图像的自动阈值分割(Otsu 法)

    关于otsu分割方法,这个文章讲的是最好的,清晰易懂,一看就是作者认真思考过的. 因为在看这个算法的时候我就想,如果一个很大的图像上,大部分像素值都在0 - 50范围内,但是有很小一块像素值在240的 ...

  5. Java并发ReadWriteLock接口

    java.util.concurrent.locks.ReadWriteLock接口允许一次读取多个线程,但一次只能写入一个线程. 读锁 - 如果没有线程锁定ReadWriteLock进行写入,则多线 ...

  6. 运维日常之机房浪潮服务器硬盘红灯亮起,服务器一直响,raid磁盘红色。。。故障解决方法

    按Ctrl+H进入到WebBIOS内,看见的错误如下所示: 错误是PDMissing,只不过维护的IBM服务器错误的磁盘不是第一块,而是第三块而已,不过坏哪块硬盘没有影响,重要的是错误的原因.这种错误 ...

  7. Spring Gateway从入门到精通

    1.Spring Gateway过滤器详解 2.Spring Gateway之Predicate详解 3.spring cloud gateway自定义过滤器 4.Spring Cloud Gatew ...

  8. OpenTSDB查询和写入毫秒级数据

    由于OpenTSDB没有支持Java的SDK进行调用,所以基于Java开发OpenTSDB的调用将要依靠HTTP请求的方式进行. 1.毫秒级数据写入 /api/put:通过POST方式插入JSON格式 ...

  9. 小记-----如何把本地jar包加载到maven库中

    1.从maven中央库下载下jar包

  10. java 不可变对象 final Collections guava 简单样例

    本地环境 jdk1.8 连接 Google Guava官方教程(中文版) journaldev 说明 java的final关键字大家都了解,但是final修饰的如果是引用类型,那么不可修改的其实只是重 ...