分类: Python/Ruby
2010-05-30 11:56:56
更多图像载入方法 为了叙述的方便,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方法.