Chinaunix首页 | 论坛 | 博客
  • 博客访问: 111208
  • 博文数量: 26
  • 博客积分: 1726
  • 博客等级: 上尉
  • 技术积分: 435
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-11 14:24
文章分类

全部博文(26)

文章存档

2013年(2)

2011年(2)

2010年(15)

2008年(7)

我的朋友

分类: Python/Ruby

2010-05-30 11:51:21

使用Image类

    在PIL中最重要的类就是Image类,它在模块中以相同的名称定义。你可以用多种方式创建该类的实例:包括从文件中载放图像,处理其它图像所得,及从草稿中创建图像。
    从文件中裁入图像,使用Imag模块中的open函数。

>>> import Image
>>> im = Image.open(”lena.ppm”)

    如果成功,函数返回一个Image对象。现在,你可以使用实例属性来检视文件内容了。

>>> print im.format, im.size, im.mode
PPM (512, 512) RGB

    format 属性标识出图像的类别,如果图像并不是从文件中读取,它的值会被设为None.size属性是一个二元组,内容包括图像的高和宽(以像素为单 位).mode属性定了的图像颜色通道数量及名字,同时也包括像素类型和深度.常见的模式比如”L”(luminance)代表灰度图,”RGB”是真彩色图像, 而”CMYK”则是打印图像.

    如果打开失败,则抛出IOError异常.

    一旦创建了一枚Image类的实例,你就可以使用这个类所定义的方法来处理和操作图像.举列来说,显示这一图像:

>>> im.show()

    (标准版本的show并不是非常有效率,因为先将图像保存为临时文件,然后调用xv来显示它.如果你没有安装xv,它甚至可能无法使用.不过当它可用的时候,还是能够非常方便地调试与测试.)
    –译注,xv是Unix下的一个看图工具,在windows是,应该是调用系统默认的工具打开图像.
    接下来的部分,我们给出这个库中的一些不同函数的总览.

读写图像
    PIL支持大范围的图像格式.从硬盘中读取图像,使用Image模块中的open函数.你不需要在打开文件的时候给出文件类型.图像库自动根据文件内容来决定格式.
    保存一枚图像,使用Image模块中的save函数.在保存图像的时候,文件名就像得很重要了.除非你指定格式,否则图像库使用文件扩展名来确定文件所用的存储格式.
    Example: 将图像转化为JPEG

import os, sys
import Image
for infile in sys.argv[1:]:

outfile = os.path.splitext(infile)[0] + “.jpg”

if infile != outfile:
try:

Image.open(infile).save(outfile)

except IOError:

 

print “cannot convert”, infile

    可以稍微花时间讨论一下显示指定文件格式时的save方法.如果你使用一个非标准的扩展名,就必须始终以这种方式指定文件格式:
    Example: 创建JPEG图像的缩略图

import os, sys
import Image
for infile in sys.argv[1:]:

 

outfile = os.path.splitext(infile)[0] + “.thumbnail”

if infile != outfile:
try:

 

im = Image.open(infile)
im.thumbnail((128, 128))
im.save(outfile, “JPEG”)

except IOError:

 

print “cannot create thumbnail for”, infile

    若非真有必要,图像库并不会去解码或载入栅格数据,注意这一点很重要.当你打开一个图像文件,读取文件头就得了文件的格式,压缩模式,大小和其它解码该文件所需要的属性.但文件的其它部分则要稍后处理.
    这意味着打开一枚图像是一个非常快速的操作,它与图像的大小及压缩方式都没有关系.这里是快速查看一堆图像属性的简单脚本:
Example:打印图像属性

import sys
import Image
for infile in sys.argv[1:]:

 

try:

im = Image.open(infile)
print infile, im.format, “%dx%d” % im.size, im.mode

except IOError:

pass

阅读(634) | 评论(0) | 转发(0) |
0

上一篇:lamp安装

下一篇:pil-handbook翻译-2

给主人留下些什么吧!~~