pil-handbook翻译-3

526阅读 0评论2010-05-30 blygl
分类:Python/Ruby

更多图像载入方法 为了叙述的方便,Image模块里的open函数经常被用来打开像文件。在多数情况下,你只需要传给它一个文件名作为参数即可:

im = Image.open("lena.ppm")

如果一切顺利,返回的是一个Image实例,否则,将会引起一枚IOError异常。

你也可以用一个类文件的实列来代替文件名。这个实例必须实现read, seek 和tell方法,并以binary模式打开.

从一个打开的文件流读取:

fp = open("lena.ppm", "rb")
im = Image.open(fp)

从一个字节流数据读取图像,使用StringIO类 :

从一个字节流读取:

import StringIO
im = Image.open(StringIO.StringIO(buffer))

注意,图像库可以在读取图像文件头之前就回朔图像(使用seek(0)),另外,seek也可以用于那些已经被读取的(使用load的方法)图像。如果图像被包含在一个大文件中,比如tar包,你可以使用ContainerIO或TarIO来读取它。

从一个TAR包读取

import TarIO

fp = TarIO.TarIO("Imaging.tar", "Imaging/test/lena.ppm")
im = Image.open(fp)

控制编码

    一些编码器允读你在读入图像之后对它进行操作。这个特性通常用于创建缩略图(效率高于图像质量)和使用单色激光打印机(仅需要一个灰度图)时.

    draft方法操作的是一个打开而未载入的图像,因此它只能提供尽可能接近给定的模式和大小的结果。它是通过重新配置图像编码来完成这一功能的。

    用drft模式读取:
im = Image.open(file)
print "original =", im.mode, im.size

im.draft("L", (100, 100))
print "draft =", im.mode, im.size

    打印出的信息大概是这样:

original = RGB (512, 512)
draft = L (128, 128)

请注意,这里的结果图像并没有跟给定的模式与大小完全吻合。如果要确定结果不大于给定的大小,需使用thumbnail方法.

上一篇:pil-handbook翻译-4
下一篇:Apache多路处理与并发配置