学习PIL模块笔记(一)
实例:
1、打开、旋转和显示图片操作(使用默认的查看器)
from PIL import Image im = Image.open("bride.jpg") im.rotate(45).show()
2、创建缩略图
from PIL import Image import glob, os size = 128, 128 for infile in glob.glob("*.jpg"): file, ext = os.path.splitext(infile) im = Image.open(infile) im.thumbnail(size, Image.ANTIALIAS) im.save(file + ".thumbnail", "JPEG")
3、新建图片操作
有两种方式:
Image.new(mode, size)
Image.new(mode, size, color)
以指定的模式和大小创建一个新图像。大小以2元元组的形式给出。给colour赋单个值,表示要创建单波段图像,元组表示创建多波段图像(每个波段一个值)。如果忽略colour参数,图像将以黑色填充。如果colour设为None,图像不会被初始化。
from PIL import Image im = Image.new("RGB", (512, 512), "white")
4、打开图片操作
有两种方式:
Image.open(file)
Image.open(file, mode)
5、图片差值操作
Image.blend(image1, image2, alpha)
通过使用alpha常量,在图像进行差值操作,创建新图像。两个图像必须具有相同的大小和模式。alpha常数取值范围为0.0~1.0,输出为out=image1*(1.0-alpha)+image2*alpha。当alpha为0时,返回值为image1的拷贝值。当alpha为1时,返回值为image2的拷贝值。
6、合并图片操作
Image.composite(image1, image2, mask)
使用遮罩(mask)作为alpha,通过在两个图像之间进行插值来创建一个新图像。遮罩图像的模式可以是“1”,“L”,或者“RGBA”。所有的图像的大小必须有相同。
7、eval
Image.eval(image, function)
把函数(function)(应该接收一个参数)应用到所给图像的每一个像素。如果图像有多个波段,相同的函数会应用到每一个波段。注意,该函数对每一个可能的像素值只计算一次,所有不能使用随机组件(components)或者其它发生器(generators)。
8、frombuffer
Image.frombuffer(mode, size, data)
Image.frombuffer(mode, size, data, decoder, parameters)
使用标准的“raw”解码器,把来自字符串或者缓冲区(buffer)对象的图像数据创建为一个图像内存(image memory)。对于某些模式,图像内存会和原来的缓冲区共享内存(这意味着对原始缓冲区对象的修改会影响图像)。不是所有的模式都能共享内存;支持共享内存的模式包括:“L”,“RGBX”,“RGBA”和“CMYK”。对其其它模式,这个函数的作用与fromstring函数类似。
9、fromstring
Image.fromstring(mode, size, data)
使用标准的“raw”解码器从来自字符串的像素数据创建一个图像内存。
Image.fromstring(mode, size, data, decoder, parameters)
也一样,但是允许你使用PIL支持的任何像素解码器。关于可用解码器的更多信息,参见Writing Your Own File Decoder节 .
注意,这个函数只对像素数据解码,而不是整个图像。如果字符串中包含了一个完整的图像文件,可以使用StringIO对象对它进行处理,并使用open函数加载图像。
10、merge
Image.merge(mode, bands)
从几个单波段图像创建一个新图像。bands参数是包含图像的元组或列表,一个图像对应模式中描述的一个波段。所有波段的图像必须有相同的大小。
方法
一个Image类的实例具有下列方法。除非另外指出,所有的方法都返回一个新的Image类的实例,包含处理过的图像数据。
1、convert
im.convert(mode) => image
im.convert(mode, matrix) => image
Convert RGB to XYZ rgb2xyz = ( 0.412453, 0.357580, 0.180423, 0, 0.212671, 0.715160, 0.072169, 0, 0.019334, 0.119193, 0.950227, 0 ) out = im.convert("RGB", rgb2xyz)
2、copy
im.copy() => image
复制图像。如果你想往图像上粘贴东西,但是又保持源图像不变可以使用这个函数。
3、crop
im.crop(box) => image
im.draft(mode, size)
im.filter(filter) => image
返回一个经过滤波器处理过的图像副本。滤波器列表参考ImageFilter模块。
6、fromstring
im.fromstring(data)
im.fromstring(data, decoder, parameters)
与fromstring功能相同,但数据加载到当前图像。
7、getbands
im.getbands() => tuple of strings
返回一个包含所有波段名称的元组。例如,在RGB图像中返回('R', 'G', 'B')。
8、getbbox
im.getbbox() ⇒ 4-tuple or None
计算图像中的非零值闭合区域,返回一个元组,包含四个坐标值(left, upper, right, lower)。如果图像为空的,返回None。
9、getcolors
im.getcolors() => a list of (count, color) tuples or None im.getcolors(maxcolors) => a list of (count, color) tuples or None
返回一个列表,列表的元素为(计数,颜色)的元组,其中计数是表示相应的颜色出现在图像中的次数。
如果maxcolors值超标,该方法停止计数并返回None。maxcolors默认值是256。你如果要确保得到图像中的所有颜色值,你可以通过size[0]*size[1](但是在处理大图像之前,你要确保拥有足够的内存)。
10、getdata
im.getdata() => sequence
浙公网安备 33010602011771号