from PIL import Image

Image模块提供了一个同名的类,用来表示一个PIL图像。
该模块还提供了许多功能函数,包括从文件加载图像和创建新图像的功能。

属性

format

im.format ⇒ string or None

源文件的文件格式,如:‘png’。对于库本身创建的图像此属性设置为None。

mode

im.mode ⇒ string(输出string)

图像模式。这是一个指定图像使用的像素格式的字符串。典型的值是“1”、“L”、“RGB”或“CMYK”。
1 (1-bit pixels, black and white, stored with one pixel per byte)二值图像
L (8-bit pixels, black and white)灰度图像
P (8-bit pixels, mapped to any other mode using a colour palette)索引图
RGB (3x8-bit pixels, true colour)真彩色
RGBA (4x8-bit pixels, true colour with transparency mask)透明混迭真彩色图像
CMYK (4x8-bit pixels, colour separation)色彩分离模型
YCbCr (3x8-bit pixels, colour video format)彩色视频格式
I (32-bit signed integer pixels)有符号整数像素
F (32-bit floating point pixels)浮点像素

size

im.size ⇒ (width, height)
PIL.Image.size
PIL.Image.width
PIL.Image.height

图像大小,返回2元组(宽、高)。

palette

im.palette ⇒ palette or None

如果有调色板表,模式是“P”,这应该是ImagePalette类的一个实例。否则,应该将其设置为None。

info

im.info ⇒ dictionary

返回图像相关的数据的字典。用来传递从文件中读取的各种非图像信息。
大多数方法在返回新图像时忽略字典;由于信息没有标准化,所以方法不可能知道操作是否会影响字典。如果后面需要这些信息,可以保留对从open方法返回的info字典的引用。

函数

new

Image.new(mode, size) ⇒ image
Image.new(mode, size, color) ⇒ image

new:创建具有给定模式和大小的新图像。
大小是以像素为单位的(宽、高)元组的形式给出的。对于单波段图像,颜色是一个值;对于多波段图像,颜色是一个元组(每个波段一个值)

from PIL import Image
im = Image.new("RGB", (512, 512), "white")
# 颜色表示:“#ff0000”, “rgb(255,0,0)”,“rgb(100%,0%,0%)”,“hsl(0,100%,50%)” ,“red”

open

Image.open(file) ⇒ image
Image.open(file, mode) ⇒ image

open:打开并标识给定的图像文件。它是惰性操作;该函数读取文件头,直到尝试处理数据才调用load方法强制加载实际的图像数据。
mode = ‘r’,可以使用字符串(表示文件名)或file对象作为文件参数。在后一种情况下,file对象必须实现read、seek和tell方法,并以二进制模式打开。

from PIL import Image
im = Image.open("lenna.jpg")

blend

Image.blend(image1, image2, alpha) ⇒ image

混合: out = image1 * (1.0 - alpha) + image2 * alpha
通过在给定的图像image1之间插值image2,通过常量alpha来控制占比,生成新图像。两个图像必须具有相同的大小和相同的模式。

composite

Image.composite(image1, image2, mask) ⇒ image

合成:通过在给定的图像之间插入,使用掩模图像中相应的像素作为alpha值,创建一个新图像。
掩码模式有“1”、“L”或“RGBA”,所有参数图像必须是相同的大小。

eval

Image.eval(image, function) ⇒ image

给定图像的每个像素使用此函数,如果图像有多个波段,则对每个波段应用它。
注意,对于每个可能的像素值,计算一次,因此不能使用随机分量或其他生成器。
eval()是程序语言中的函数,功能是获取返回值,不同语言大同小异。

frombuffer

Image.frombuffer(mode, size, data) ⇒ image

raw decoder:使用标准的“原码”解码器,从字符串或缓冲区对象中的像素数据创建图像内存。对于某些模式,图像内存将与原始缓冲区共享内存(这意味着对原始缓冲区对象的更改将反映在图像中)。不是所有模式都能共享内存;支持的模式包括“L”、“RGBX”、“RGBA”和“CMYK”。对于其他模式,此函数的行为类似于对fromstring函数的相应调用。

im = Image.frombuffer(mode, size, data, "raw", mode, 0, 1)

fromstring

Image.fromstring(mode, size, data) ⇒ image

源码数据图像:使用标准的“原码”解码器,从字符串中的像素数据创建图像。

Image.fromstring(mode, size, data, decoder, parameters) ⇒ image

Image.fromstring("RGB",(10,10),datas.tostring()).save("./data/1.png","png")

同上,不过允许你使用PIL支持的像素解码器。注意,只解码像素数据,而不是整个图像文件。如果字符串中有一个完整的图像文件,请将其包装在StringIO对象中,并使用open加载它。

merge

Image.merge(mode, bands) ⇒ image

融合:从多个单波段图像创建一个新图像。波段以元组或图像列表的形式给出,每个波段由模式描述。所有波段必须有相同的大小。

方法

Image类的实例有以下方法。除非另有说明,否则所有方法都返回Image类的新实例,并保存结果图像。

convert

im.convert(mode) ⇒ image

模式转换:将图像转换为另一种模式,并返回新图像。

copy

im.copy() ⇒ image

复制图像。将原始图像内容粘贴到图像中,仍保留原始内容,就使用此方法。

crop

im.crop(box) ⇒ image

裁剪:从当前图像返回矩形区域的副本。box是定义左、上、右和下像素坐标的4元组。这是一个惰性操作。对源图像的更改可能反映在裁剪后的图像中,也可能不反映在裁剪后的图像中。要获取一个单独的副本,请在裁剪后的副本上调用load方法(隐调)。

close

Image.close()

关闭文件指针。
这个操作将破坏 image core并释放它的内存。之后图像数据将不可用。此函数仅用于关闭尚未被load()方法读取并关闭其文件的图像。

draft

im.draft(mode, size)

配置图像文件加载程序:使其返回尽可能接近给定模式和大小的图像版本。
例如,您可以使用此方法在加载时将彩色JPEG转换为灰度,或者从PCD文件中提取128x192版本。注意,这个方法重新配置了文件读取器。如果图像已经加载,则此方法无效。

filter

im.filter(filter) ⇒ image

返回滤波得到的图像。参见The ImageFilter Module

fromstring

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

字符串数据加载:将数据加载到当前图像中。im确定了mode,size等基本信息,只待加载具体的像素值。

getbands

im.getbands() ⇒ tuple of strings

返回一个包含每个波段名称的元组。例如,RGB图像上的getband返回(“R”、“G”、“B”)。

getbbox

im.getbbox() ⇒ 4-tuple or None

计算图像非零区域方形边界。这个包围盒是一个4元组,定义了左、上、右和下像素坐标。如果图像是空的,这个方法将返回空。注意函数double B

from PIL import Image
im = Image.open("./data/lena.png")
im.getbbox()
# 输出PNG (0, 0, 512, 512)

getcolors

im.getcolors() ⇒ a list of (count, color) tuples or None
im.getcolors(maxcolors) ⇒ a list of (count, color) tuples or None

统计颜色和次数:返回无序list每个元素是(count,color)元组,其中count是对应颜色在图像中出现的次数。maxcilors:最大颜色数。多通道彩色图像可以拥有的最大颜色数,等于它包含的像素数。例如,一张50*60px的图片最多有3000种颜色。如果是灰度图L,那么maxcolors=256,单通道。(否则,很有可能返回None)

img = Image.open(imgDress) 
print("src:",img.getcolors(img.size[0]*img.size[1]))
# 显示结果(1, (196, 163, 178)), (1, (193, 163, 162)), (2, (192, 163, 162)), (2, (188, 163, 162)),...

getdata

im.getdata() ⇒ sequence

图像像素值序列:以包含像素值的序列对象的形式返回此图像的内容。序列对象是平铺的,因此第一行的值紧跟在第0行的值之后,依此类推。
注意:此方法返回的sequence对象是一个内部的PIL数据类型,只支持一定的sequence操作。若要将其转换为普通序列(如打印),请使用list(im.getdata())。
参数:波段,表示返回哪一个波段。默认是返回所有波段。若要返回单个频带,请传入索引值(例如,从“RGB”图像中获取“R”波段)。
返回:一个类似序列的对象。

img = Image.open(imgDress) 
print("src:",img.getdata())
# 显示结果[(226, 134, 118), (225, 132, 112), (222, 128, 107), (225, 132, 110), ...]

getextrema

im.getextrema() ⇒ 2-tuple

获取图像中每个波段的最小和最大像素值。
返回:对于单波段图像,一个包含最小和最大像素值的二元组。对于多波段图像,每个波段包含一个二元组的元组。如RGB图,返回((72, 255), (0, 232), (47, 211)),分别每个波段的最小值和最大值组成一个元组构成返回值。

getpalette

Image.getpalette()

调色板列表:将图像调色板作为列表返回。
返回:颜色值的列表[r, g, b,…],如果图像没有调色板,则为None。

getpixel

im.getpixel(xy) ⇒ value or tuple

返回给定位置的像素值。 参数:xy -坐标,表示为(x, y)。 返回:像素值。如果图像是一个多层图像,这个方法返回一个元组。

histogram

im.histogram() ⇒ list
im.histogram(mask) ⇒ list

像素计数的列表:返回图像的直方图。直方图作为像素计数列表返回,每个像素值对应一个源图像。如果图像有多个波段,则连接所有波段的直方图(例如,“RGB”图像的直方图包含768个值)。(256*3=768)
该方法将双能级图像(模式“1”)处理为灰度(“L”)图像。
如果提供了mask,该方法将返回图像中mask图像非零部分的直方图。mask图像必须与图像具有相同的大小,并且是一个双层图像(模式“1”)或一个灰度图像(“L”)。
参数:mask-一个可选的蒙版。
返回:一个包含像素计数的列表。各个灰度级的计数列表,形如:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 8, 6, 10, 9, 20, 37, 32, 41, 53, 74, 103, 132, 179, 193, 242, 238, 336, 386, 404, 483, 607, 628, …]

load

im.load()

为图像分配存储空间并从文件(或从源文件,用于惰性操作)加载它。在通常情况下,不需要调用这个方法,因为当第一次访问打开的图像时,图像类会自动加载它。

pix = im.load()
print pix[x, y]
pix[x, y] = value

offset

im.offset(xoffset, yoffset) ⇒ image

偏移图像:返回图像偏移图像。数据包围了边缘。如果省略yoffset,则假定它等于xoffset。(已弃用)

paste

im.paste(image, box)
im.paste(colour, box)
im.paste(image, box, mask)
im.paste(colour, box, mask)

将另一个图像粘贴到此图像中。box参数要么是一个给出左上角的2元组,要么是一个定义左、上、右和下像素坐标的4元组,要么没给定(与(0,0)相同)。如果给定一个4元组,所粘贴图像的大小必须与区域的大小匹配。
如果模式不匹配,则将粘贴的图像转换为此图像的模式。如果给定mask,则此方法仅更新掩码所指示的区域。

point

im.point(table) ⇒ image
im.point(function) ⇒ image
im.point(table, mode) ⇒ image
im.point(function, mode) ⇒ image

通过查找表或函数返回Image对象。

putalpha

im.putalpha(band)

在此图像中添加或替换alpha层。如果图像没有alpha层,它将被转换为“LA”或“RGBA”。新层必须是“L”或“1”。
参数:alpha -新的alpha层。这可以是一个“L”或“1”图像具有与此图像相同的大小,也可以是一个整数或其他颜色值。

putdata

im.putdata(data)
im.putdata(data, scale, offset)

将像素数据复制到此图像。该方法将序列对象中的数据复制到图像中,从左上角(0,0)开始,一直复制到图像或序列结束。scale和offset值用于调整序列值:pixel = value*scale + offset。
参数:
data:一个序列对象。
scale:比例值,默认是1.0。
offset:一个可选的偏移量值。默认值是0.0。

putpalette

im.putpalette(sequence)

附加调色板:将调色板附加到此图像。图像必须是“P”或“L”图像,调色板序列必须包含768个整数值,其中每组三个值表示对应像素索引的红色、绿色和蓝色值。可以使用8位字符串代替整数序列。
参数:datasequence,调色板序列(列表或字符串)。

putpixel

im.putpixel(xy, colour)

修改给定位置的像素。对于单波段图像,颜色是一个单一的数值;对于多波段图像,颜色是一个元组。
注意,此方法相对较慢。对于更广泛的更改,可以使用paste()或ImageDraw模块。

quantize

Image.quantize(colors=256, method=None, kmeans=0, palette=None) ⇒ image

用指定数量的颜色将图像转换为“P”模式。详细请参考:Image.quantize()
参数: colors—所需的颜色数量,<= 256

resize

返回此图像的大小调整后的副本。

im.resize(size) ⇒ image
im.resize(size, filter) ⇒ image
Image.resize(size, resample=0)

Parameters:
size – 需求的尺寸(width, height).
resample – 重采样用的滤波器有:PIL.Image.NEAREST, PIL.Image.BOX, PIL.Image.BILINEAR, PIL.Image.HAMMING, PIL.Image.BICUBIC or PIL.Image.LANCZOS. 如果省略,或者图像模式为“1”或“P”,则设置为 PIL.Image.NEAREST

rotate

im.rotate(angle) ⇒ image
im.rotate(angle, filter=NEAREST, expand=0) ⇒ image
Image.rotate(angle, resample=0, expand=0, center=None, translate=None)

返回此图像的旋转副本。此方法返回此图像的副本,并将给定的角度沿其中心逆时针旋转。

save

im.save(outfile, options…)
im.save(outfile, format, options…)
Image.save(fp, format=None, **params)

将此图像保存在给定的文件名下。如果没有指定格式,则尽可能从文件名扩展名确定要使用的格式。

seek

im.seek(frame)

Seeks to the given frame in this sequence file. If you seek beyond the end of the sequence, the method raises an EOFError exception. When a sequence file is opened, the library automatically seeks to frame 0. Note that in the current version of the library, most sequence formats only allows you to seek to the next frame.

show

显示这张图片。此方法主要用于调试。

Image.show(title=None, command=None)
Parameters:
title – Optional title to use for the image window, where possible.
command – command used to show the image

split

im.split() ⇒ sequence

把这个图像分割成单独的波段。此方法从图像返回单个图像带的元组。例如,分割一个“RGB”图像会创建三个新图像,每个图像都包含一个原始波段(红、绿、蓝)的副本。 返回:一个包含带的元组。

tell

im.tell() ⇒ integer

返回当前的帧号。

thumbnail

im.thumbnail(size)
im.thumbnail(size, filter)
Image.thumbnail(size, resample=3)

缩略图:把图像做成一个缩略图。此方法修改图像本身以包含其自身的缩略图版本,缩略图不大于给定的大小。
此方法计算适当的缩略图大小以保留图像的外观,调用draft()方法来配置文件读取器(在适用的情况下),最后调整图像的大小。
注意,这个函数修改了图像对象。如果还需要使用全分辨率原始图像,请应用此方法前保存原始图像的副本。

tostring

im.tostring() ⇒ string
im.tostring(encoder, parameters) ⇒ string

使用标准的“原始”编码器返回包含像素数据的字符串。

transform

im.transform(size, method, data) ⇒ image
im.transform(size, method, data, filter) ⇒ image
im.transform(size, EXTENT, data) ⇒ image
im.transform(size, EXTENT, data, filter) ⇒ image
im.transform(size, AFFINE, data) ⇒ image
im.transform(size, AFFINE, data, filter) ⇒ image
im.transform(size, QUAD, data) ⇒ image
im.transform(size, QUAD, data, filter) ⇒ image
im.transform(size, MESH, data) image ⇒ image
im.transform(size, MESH, data, filter) image ⇒ image
im.transform(size, PERSPECTIVE, data) image ⇒ image
im.transform(size, PERSPECTIVE, data, filter) image ⇒ image

图像变换。该方法创建一个具有给定大小和与原始模式相同的新图像,并使用给定的方法将数据复制到新图像。

transpose

im.transpose(method) ⇒ image

图像转置(翻转或旋转90度)

verify

im.verify()

验证文件的内容。对于从文件中读取的数据,此方法尝试确定文件是否被破坏,而不实际解码图像数据。如果此方法发现任何问题,它将引发适当的异常。如果使用此方法后需要加载图像,则必须重新打开图像文件。