Image 模块#

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

实例#

打开、旋转和显示图像(使用默认查看器)#

以下脚本加载图像,将其旋转45度,并使用外部查看器(在Unix上通常是XV,在Windows上通常是Paint程序)显示它。**

from PIL import Image
with Image.open("hopper.jpg") as im:
    im.rotate(45).show()

创建缩略图#

下面的脚本创建了当前目录中所有JPEG图像的漂亮缩略图,保留了最大分辨率为128x128的纵横比。**

from PIL import Image
import glob, os

size = 128, 128

for infile in glob.glob("*.jpg"):
    file, ext = os.path.splitext(infile)
    with Image.open(infile) as im:
        im.thumbnail(size)
        im.save(file + ".thumbnail", "JPEG")

功能#

PIL.Image.open(fp, mode='r', formats=None)[源代码]#

打开并标识给定的图像文件。

这是一个懒惰的操作;此函数标识文件,但文件保持打开状态,并且在尝试处理数据(或调用 load() 方法)。见 new() . 见 Pillow中的文件处理 .

参数:
  • fp -- 文件名(字符串)、路径lib.Path对象或文件对象。文件对象必须实现 file.readfile.seek ,以及 file.tell 方法,并以二进制模式打开。在读取之前,文件对象也将查找到零。

  • mode -- 模式。如果给出,这个参数必须是“r”。

  • formats -- 尝试加载文件的格式列表或元组。这可用于限制选中的格式集。经过 None 若要尝试所有支持的格式,请执行以下操作。您可以通过运行以下命令打印可用格式集 python3 -m PIL 或使用 PIL.features.pilinfo() 功能。

返回:

Image 对象。

抛出:

警告

为了防止“解压缩炸弹”(即将大量数据解压成恶意文件,旨在通过使用大量内存而崩溃或造成中断)引起的潜在DOS攻击,Pillow将发出 DecompressionBombWarning 如果图像中的像素数超过某一限制, MAX_IMAGE_PIXELS

此阈值可通过设置 MAX_IMAGE_PIXELS 。可以通过设置来禁用它 Image.MAX_IMAGE_PIXELS = None

如果需要,可以将警告转换为错误 warnings.simplefilter('error', Image.DecompressionBombWarning) 或者完全被压制 warnings.simplefilter('ignore', Image.DecompressionBombWarning) . 也见 the logging documentation 将警告输出到日志工具而不是stderr。

如果像素数大于两倍 MAX_IMAGE_PIXELS ,然后是一个 DecompressionBombError 将会被提升。

图像处理#

PIL.Image.alpha_composite(im1, im2)[源代码]#

IM1上的α复合IM2。

参数:
  • im1 -- 第一张图片。必须具有模式rgba。

  • im2 -- 第二张图片。必须具有模式rgba,并且大小与第一个图像相同。

返回:

Image 对象。

PIL.Image.blend(im1, im2, alpha)[源代码]#

通过使用常量Alpha::在两个输入图像之间进行内插来创建新图像

out = image1 * (1.0 - alpha) + image2 * alpha
参数:
  • im1 -- 第一张图片。

  • im2 -- 第二张图片。必须与第一个图像具有相同的模式和大小。

  • alpha -- 插值α因子。如果alpha为0.0,则返回第一个图像的副本。如果alpha为1.0,则返回第二个图像的副本。alpha值没有限制。如有必要,将结果裁剪到允许的输出范围内。

返回:

Image 对象。

PIL.Image.composite(image1, image2, mask)[源代码]#

通过使用透明蒙版混合图像来创建合成图像。

参数:
  • image1 -- 第一张图片。

  • image2 -- 第二张图片。必须与第一个图像具有相同的模式和大小。

  • mask -- 掩模图像。此图像可以具有模式“1”、“l”或“rgba”,并且必须与其他两个图像具有相同的大小。

PIL.Image.eval(image, *args)[源代码]#

对给定图像中的每个像素应用函数(应采用一个参数)。如果图像有多个波段,则对每个波段应用相同的功能。请注意,该函数对每个可能的像素值进行一次评估,因此不能使用随机组件或其他生成器。

参数:
  • image -- 输入图像。

  • function -- 一个函数对象,采用一个整型参数。

返回:

Image 对象。

PIL.Image.merge(mode, bands)[源代码]#

将一组单波段图像合并为新的多波段图像。

参数:
  • mode -- 用于输出图像的模式。见: 模式 .

  • bands -- 包含输出图像中每个波段一个单波段图像的序列。所有带区的大小必须相同。

返回:

Image 对象。

构建图像#

PIL.Image.new(mode, size, color=0)[源代码]#

创建具有给定模式和大小的新图像。

参数:
  • mode -- 用于新图像的模式。见: 模式 .

  • size -- 以像素为单位包含(宽度、高度)的2元组。

  • color -- 图像使用哪种颜色。默认设置为黑色。如果给定,则对于单频带模式,它应该是单个整数值或浮点值,对于多频带模式,它应该是一个元组(每个频段一个值)。在创建RGB或HSV图像时,您还可以使用ImageColor模块支持的颜色字符串。如果颜色为None,则不会初始化图像。

返回:

Image 对象。

PIL.Image.fromarray(obj, mode=None)[源代码]#

从导出数组接口的对象创建图像内存(使用缓冲区协议):

from PIL import Image
import numpy as np
a = np.zeros((5, 5))
im = Image.fromarray(a)

如果 obj 不是连续的,则 tobytes 方法被调用,并且 frombuffer() 是使用的。

在NumPy的情况下,请注意枕头模式并不总是对应于NumPy数据类型。枕头模式仅提供1位像素、8位像素、32位带符号整数像素和32位浮点像素。

枕头图像也可以转换为数组::

from PIL import Image
import numpy as np
im = Image.open("hopper.jpg")
a = np.asarray(im)

但是,当将枕形图像转换为数组时,仅传输像素值。这意味着P和PA模式图像将失去调色板。

参数:
  • obj -- 带数组接口的对象

  • mode -- 阅读时使用的可选模式 obj 。将根据类型确定,如果 None 。这将不用于在读取后转换数据,但将用于更改数据的读取方式::from PIL IMPORT Image IMPORT NAMPY as np a=np.full((1,1),300)im=Image.Fromarray(a,mode=“L”)im.getPixel((0,0))#44 im=Image.Fromarray(a,mode=“rgb”)im.getPixel((0,0))#(44,1,0)请参阅: 模式 有关模式的一般信息。

返回:

图像对象。

在 1.1.6 版本加入.

PIL.Image.frombytes(mode, size, data, decoder_name='raw', *args)[源代码]#

从缓冲区中的像素数据创建图像内存的副本。

最简单的形式是,这个函数接受三个参数(模式、大小和未压缩的像素数据)。

您也可以使用PIL支持的任何像素解码器。有关可用解码器的更多信息,请参阅 Writing Your Own File Codec

请注意,此函数只解码像素数据,而不是整个图像。如果在字符串中包含整个图像,请将其包装为 BytesIO 对象与使用 open() 加载它。

参数:
  • mode -- 图像模式。见: 模式 .

  • size -- 图像大小。

  • data -- 包含给定模式的原始数据的字节缓冲区。

  • decoder_name -- 使用什么解码器。

  • args -- 给定解码器的其他参数。

返回:

Image 对象。

PIL.Image.frombuffer(mode, size, data, decoder_name='raw', *args)[源代码]#

在字节缓冲区中创建引用像素数据的图像内存。

此功能类似于 frombytes() ,但尽可能使用字节缓冲区中的数据。这意味着对原始缓冲区对象的更改将反映在此图像中)。并非所有模式都可以共享内存;支持的模式包括“l”、“rgbx”、“rgba”和“cmyk”。

请注意,此函数仅对像素数据进行解码,而不是对整个图像进行解码。如果字符串中包含整个图像文件,请将其包装在 BytesIO 对象,并使用 open() 来装载它。

在当前版本中,用于“原始”解码器的默认参数与用于 frombytes() . 这是一个bug,可能会在将来的版本中修复。如果执行此操作,当前版本将发出警告;要禁用该警告,应提供完整的参数集。详情见下文。

参数:
  • mode -- 图像模式。见: 模式 .

  • size -- 图像大小。

  • data -- 包含给定模式的原始数据的字节或其他缓冲区对象。

  • decoder_name -- 使用什么解码器。

  • args -- 给定解码器的其他参数。对于默认编码器(“raw”),建议您提供完整的参数集::frombuffer(模式、大小、数据,“raw”,模式,0,1)

返回:

Image 对象。

在 1.1.4 版本加入.

生成图像#

PIL.Image.effect_mandelbrot(size, extent, quality)[源代码]#

生成覆盖给定范围的Mandelbrot集。

参数:
  • size -- 以像素为单位的请求大小,作为2元组:(宽度、高度)。

  • extent -- 要覆盖的范围,以四元组形式:(x0,y0,x1,y1)。

  • quality -- 质量。

PIL.Image.effect_noise(size, sigma)[源代码]#

生成以128为中心的高斯噪声。

参数:
  • size -- 以像素为单位的请求大小,作为2元组:(宽度、高度)。

  • sigma -- 噪声标准差。

PIL.Image.linear_gradient(mode)[源代码]#

生成256x256线性渐变,从黑到白,从上到下。

参数:

mode -- 输入模式。

PIL.Image.radial_gradient(mode)[源代码]#

生成256x256径向渐变,从黑色到白色,中心到边缘。

参数:

mode -- 输入模式。

正在注册插件#

PIL.Image.preinit()[源代码]#

显式加载标准文件格式驱动程序。

PIL.Image.init()[源代码]#

显式初始化Python图像库。此函数加载所有可用的文件格式驱动程序。

备注

这些函数供插件作者使用。当插件作为的一部分加载时会调用它们 preinit()init() 。应用程序作者可以忽略它们。

PIL.Image.register_open(id, factory, accept=None)[源代码]#

注册图像文件插件。应用程序代码中不应使用此函数。

参数:
  • id -- 图像格式标识符。

  • factory -- 图像文件工厂方法。

  • accept -- 一种可选功能,可用于快速拒绝具有另一种格式的图像。

PIL.Image.register_mime(id, mimetype)[源代码]#

注册图像mime类型。应用程序代码中不应使用此函数。

参数:
  • id -- 图像格式标识符。

  • mimetype -- 此格式的图像mime类型。

PIL.Image.register_save(id, driver)[源代码]#

注册图像保存功能。应用程序代码中不应使用此函数。

参数:
  • id -- 图像格式标识符。

  • driver -- 以这种格式保存图像的函数。

PIL.Image.register_save_all(id, driver)[源代码]#

注册一个图像函数来保存多帧格式的所有帧。应用程序代码中不应使用此函数。

参数:
  • id -- 图像格式标识符。

  • driver -- 以这种格式保存图像的函数。

PIL.Image.register_extension(id, extension)[源代码]#

注册图像扩展名。应用程序代码中不应使用此函数。

参数:
  • id -- 图像格式标识符。

  • extension -- 用于此格式的扩展名。

PIL.Image.register_extensions(id, extensions)[源代码]#

注册映像扩展名。应用程序代码中不应使用此函数。

参数:
  • id -- 图像格式标识符。

  • extensions -- 用于此格式的扩展名列表。

PIL.Image.registered_extensions()[源代码]#

返回包含所有属于已注册插件的文件扩展名的字典

PIL.Image.register_decoder(name, decoder)[源代码]#

注册图像解码器。应用程序代码中不应使用此函数。

参数:
  • name -- 解码器的名称

  • decoder -- 返回imagefile.pydecoder对象的可调用(模式,参数)

在 4.1.0 版本加入.

PIL.Image.register_encoder(name, encoder)[源代码]#

注册图像编码器。应用程序代码中不应使用此函数。

参数:
  • name -- 编码器的名称

  • encoder -- 返回imagefile.pyencoder对象的可调用(模式,参数)

在 4.1.0 版本加入.

图像类#

class PIL.Image.Image[源代码]#

此类表示图像对象。创造 Image 对象,使用适当的工厂功能。几乎没有任何理由直接调用图像构造函数。

的实例 Image 类具有以下方法。除非另有说明,否则所有方法都返回 Image 类,保存生成的图像。

Image.alpha_composite(im, dest=(0, 0), source=(0, 0))[源代码]#

image.alpha_复合的“就地”模拟。将图像合成到该图像上。

参数:
  • im -- 要在此图像上合成的图像

  • dest -- 可选的2个元组(左上角),指定此(目标)图像中的左上角。

  • source -- 覆盖源图像中左上角的可选2(左,上)元组,或源矩形边界的4个元组(左,上,右,下)

性能说明:目前没有在核心层中就地实现。

Image.apply_transparency()[源代码]#

如果P模式图像在INFO字典中有“透明”键,则移除该键并将透明度应用于调色板。否则,图像将保持不变。

Image.convert(mode=None, matrix=None, dither=None, palette=Palette.WEB, colors=256)[源代码]#

返回此图像的转换副本。对于“P”模式,此方法通过调色板转换像素。如果省略了模式,则会选择一个模式,以便可以在不使用调色板的情况下表示图像和调色板中的所有信息。

目前的版本支持所有可能的L、RGB和CMYK之间的转换。这个 matrix Argation只支持“L”和“RGB”。

将彩色图像转换为灰度(模式“L”)时,库使用ITU-R 601-2 Luma转换:

L = R * 299/1000 + G * 587/1000 + B * 114/1000

将灰度(“L”)或“RGB”图像转换为两级(模式“1”)图像的默认方法使用Floyd-Steinberg抖动来近似原始图像的亮度级别。如果抖动是 None ,则将所有大于127的值设置为255(白色),将所有其他值设置为0(黑色)。若要使用其他阈值,请使用 point() 方法。

从“RGBA”转换为“P”时不带 matrix 参数,则将操作传递给 quantize() ,以及 ditherpalette 都被忽略了。

当从“PA”转换时,如果存在“RGBA”调色板,则将使用图像中的Alpha通道,而不是调色板中的值。

参数:
  • mode -- 请求的模式。见: 模式 .

  • matrix -- 可选的转换矩阵。如果给定,则应该是包含浮点值的4或12元组。

  • dither -- 抖动方法,从“RGB”模式转换为“P”或从“RGB”或“L”模式转换为“1”时使用。可用的方法有 Dither.NONEDither.FLOYDSTEINBERG (默认)。请注意,在以下情况下不使用此选项 matrix 是提供的。

  • palette -- 从“RGB”模式转换为“P”模式时使用的调色板。可用的调色板有 Palette.WEBPalette.ADAPTIVE

  • colors -- 要用于的颜色数 Palette.ADAPTIVE 调色板。默认为256。

返回类型:

Image

返回:

Image 对象。

下面的示例将RGB图像(根据ITU-R 709使用D65光源进行线性校准)转换为CIE 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)
Image.copy()[源代码]#

复制此图像。如果要将内容粘贴到图像中,但仍保留原始内容,请使用此方法。

返回类型:

Image

返回:

Image 对象。

Image.crop(box=None)[源代码]#

返回此图像中的矩形区域。框是定义左、上、右和下像素坐标的四元组。见 坐标系 .

注意:在Pillow3.4.0之前,这是一个懒惰的操作。

参数:

box -- 裁剪矩形,作为(左、上、右、下)元组。

返回类型:

Image

返回:

Image 对象。

这将使用提供的坐标裁剪输入图像:

from PIL import Image

with Image.open("hopper.jpg") as im:

    # The crop method from the Image module takes four coordinates as input.
    # The right can also be represented as (left+width)
    # and lower can be represented as (upper+height).
    (left, upper, right, lower) = (20, 20, 100, 100)

    # Here the image "im" is cropped and assigned to new variable im_crop
    im_crop = im.crop((left, upper, right, lower))
Image.draft(mode, size)[源代码]#

配置 Mapfile 加载程序,使其返回尽可能与给定模式和大小匹配的映像版本。例如,可以使用此方法在加载彩色JPEG时将其转换为灰度。

如果进行了任何更改,则返回一个带有 modebox 原始图像的坐标在修改后的图像内。

请注意,此方法修改了 Image 物体就位。如果图像已加载,则此方法无效。

注意:此方法不适用于大多数图像。它目前只为JPEG和MPO图像实现。

参数:
  • mode -- 请求的模式。

  • size -- 以像素为单位的请求大小,作为2元组:(宽度、高度)。

Image.effect_spread(distance)[源代码]#

在图像中随机分布像素。

参数:

distance -- 扩散像素的距离。

Image.entropy(mask=None, extrema=None)[源代码]#

计算并返回图像的熵。

该方法将二级图像(模式“1”)作为灰度(“L”)图像处理。

如果提供了遮罩,则该方法对遮罩图像为非零的图像部分使用直方图。遮罩图像的大小必须与图像相同,并且是双层图像(模式“1”)或灰度图像(“L”)。

参数:
  • mask -- 一个可选的面具。

  • extrema -- 手动指定的极值的可选元组。

返回:

表示图像熵的浮点值

Image.filter(filter)[源代码]#

使用给定的筛选器筛选此图像。有关可用筛选器的列表,请参阅 ImageFilter 模块。

参数:

filter -- 过滤内核。

返回:

Image 对象。

这将使用来自 ImageFilter 模块::

from PIL import Image, ImageFilter

with Image.open("hopper.jpg") as im:

    # Blur the input image using the filter ImageFilter.BLUR
    im_blurred = im.filter(filter=ImageFilter.BLUR)
Image.frombytes(data, decoder_name='raw', *args)[源代码]#

从bytes对象加载此图像和像素数据。

此方法类似于 frombytes() 函数,但将数据加载到此图像中,而不是创建新的图像对象。

Image.getbands()[源代码]#

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

返回:

包含带区名称的元组。

返回类型:

tuple

这有助于获取输入图像的波段::

from PIL import Image

with Image.open("hopper.jpg") as im:
    print(im.getbands())  # Returns ('R', 'G', 'B')
Image.getbbox(*, alpha_only=True)[源代码]#

计算图像中非零区域的边界框。

参数:

alpha_only -- 可选标志,默认为 True 。如果 True 并且图像有一个Alpha通道,裁剪透明像素。否则,请在所有通道均为零时裁切像素。仅限关键字的参数。

返回:

边界框作为定义左、上、右和下像素坐标的四元组返回。见 坐标系 . 如果图像完全为空,则此方法返回“无”。

这有助于获取输入图像的边界框坐标::

from PIL import Image

with Image.open("hopper.jpg") as im:
    print(im.getbbox())
    # Returns four coordinates in the format (left, upper, right, lower)
Image.getchannel(channel)[源代码]#

返回包含源图像的单个通道的图像。

参数:

channel -- 返回哪个通道。可以是索引(“rgb”的“r”通道为0)或通道名称(“rgb a”的alpha通道为a”)。

返回:

处于“L”模式的图像。

在 4.3.0 版本加入.

Image.getcolors(maxcolors=256)[源代码]#

返回此图像中使用的颜色列表。

颜色将处于图像的模式。例如,RGB图像将返回(红、绿、蓝)颜色值的元组,而P图像将返回调色板中颜色的索引。

参数:

maxcolors -- 最大颜色数。如果超过此数字,此方法将不返回任何值。默认限制为256色。

返回:

(计数、像素)值的未排序列表。

Image.getdata(band=None)[源代码]#

将此图像的内容作为包含像素值的序列对象返回。序列对象被展平,因此行1的值直接位于行0的值之后,依此类推。

请注意,此方法返回的Sequence对象是内部PIL数据类型,它只支持某些Sequence操作。要将其转换为普通序列(例如,用于打印),请使用 list(im.getdata())

参数:

band -- 返回哪个波段。默认值是返回所有带区。要返回单个波段,请传递索引值(例如0,从“rgb”图像中获取“r”波段)。

返回:

类似序列的物体。

Image.getexif()[源代码]#

从图像中获取EXIF数据。

返回:

一个 Exif 对象。

Image.getextrema()[源代码]#

获取图像中每个带区的最小和最大像素值。

返回:

对于单波段图像,包含最小和最大像素值的2元组。对于多波段图像,每个波段包含一个2元组的元组。

Image.getpalette(rawmode='RGB')[源代码]#

以列表形式返回图像调色板。

参数:

rawmode -- 返回调色板的模式。 None 将以其当前模式返回调色板。。。版本已添加::9.1.0

返回:

如果图像没有调色板,则显示颜色值列表[R、G、B…]或无。

Image.getpixel(xy)[源代码]#

返回给定位置的像素值。

参数:

xy -- 坐标,以(x,y)表示。见 坐标系 .

返回:

像素值。如果图像是多层图像,则此方法返回元组。

Image.getprojection()[源代码]#

得到x轴和y轴的投影

返回:

两个序列,分别指示沿X轴和Y轴有非零像素的位置。

Image.histogram(mask=None, extrema=None)[源代码]#

返回图像的直方图。直方图以像素计数列表的形式返回,源图像中的每个像素值一个像素计数列表。计数被分组到每个波段的256个箱中,即使图像的每个波段具有8个以上的比特。如果图像有多个带,则所有带的直方图将被串联(例如,“RGB”图像的直方图包含768个值)。

该方法将二级图像(模式“1”)作为灰度(“L”)图像处理。

如果提供了遮罩,该方法将返回图像中遮罩图像非零部分的直方图。遮罩图像必须与图像具有相同的大小,并且是双层图像(模式“1”)或灰度图像(“L”)。

参数:
  • mask -- 一个可选的面具。

  • extrema -- 手动指定的极值的可选元组。

返回:

包含像素计数的列表。

Image.paste(im, box=None, mask=None)[源代码]#

将另一个图像粘贴到此图像中。box参数要么是给出左上角的2元组,要么是定义左、上、右和下像素坐标的4元组,要么是无(与(0,0)相同)。见 坐标系 . 如果给定4元组,则粘贴图像的大小必须与区域的大小匹配。

如果模式不匹配,则粘贴的图像将转换为此图像的模式(请参见 convert() 详细方法)。

源可以是包含像素值的整数或元组,而不是图像。然后,该方法用给定的颜色填充该区域。创建RGB图像时,还可以使用ImageColor模块支持的颜色字符串。

如果给定了蒙版,则此方法仅更新蒙版指示的区域。您可以使用“1”、“L”、“LA”、“RGBA”或“RGBA”图像(如果存在,则将Alpha带用作遮罩)。如果掩码为255,则按原样复制给定的图像。如果掩码为0,则保留当前值。中间值将两个图像混合在一起,包括它们的Alpha通道(如果它们有)。

alpha_composite() 如果你想结合图像的阿尔法通道。

参数:
  • im -- 源图像或像素值(整数或元组)。

  • box -- 一个可选的4元组,给出要粘贴到的区域。如果使用2元组,则将其视为左上角。如果省略或没有,则源将粘贴到左上角。如果将图像作为第二个参数提供,而没有第三个参数,则框默认为(0,0),第二个参数将解释为遮罩图像。

  • mask -- 可选的遮罩图像。

Image.point(lut, mode=None)[源代码]#

通过查找表或函数映射此图像。

参数:
  • lut -- 一个查找表,包含图像中每个波段的256值(如果self.mode==“I”和MODE==“L”,则为65536)。可以改用函数,它应该只接受一个参数。该函数针对每个可能的像素值调用一次,并将结果表应用于图像的所有波段。它也可能是一个 ImagePointHandler Object::Class Example(Image.ImagePointHandler):def point(self,data):#返回结果

  • mode -- 输出模式(默认与输入相同)。在当前版本中,只有当源图像具有模式“L”或“P”,并且输出具有模式“1”或源图像模式为“I”,并且输出模式为“L”时,才能使用此选项。

返回:

Image 对象。

Image.putalpha(alpha)[源代码]#

添加或替换此图像中的alpha层。如果图像没有alpha层,它将转换为“la”或“rgba”。新层必须是“l”或“1”。

参数:

alpha -- 新的alpha层。这可以是与此图像大小相同的“l”或“1”图像,也可以是整数或其他颜色值。

Image.putdata(data, scale=1.0, offset=0.0)[源代码]#

将像素数据从拼合的序列对象复制到图像中。这些值应该从左上角(0,0)开始,继续到行尾,紧跟在第二行的第一个值之后,依此类推。数据将一直被读取,直到图像或序列结束。比例和偏移值用于调整序列值: pixel = value*scale + offset

参数:
  • data -- 展平的序列对象。

  • scale -- 可选的比例值。默认值为1.0。

  • offset -- 可选的偏移值。默认值为0.0。

Image.putpalette(data, rawmode='RGB')[源代码]#

将调色板附加到此图像。图像必须是“P”、“PA”、“L”或“LA”图像。

调色板序列最多必须包含256种颜色,由RAW模式下每个通道的一个整数值组成。例如,如果RAW模式是“RGB”,则它最多可以包含768个值,这些值由256种颜色中对应像素索引的红、绿和蓝值组成。如果RAW模式是“RGBA”,那么它最多可以包含1024个值,包含红色、绿色、蓝色和Alpha值。

或者,可以使用8位字符串来代替整数序列。

参数:
  • data -- 调色板序列(列表或字符串)。

  • rawmode -- 调色板的原始模式。“RGB”、“RGBA”或可转换为“RGB”或“RGBA”的模式(例如“R”,“BGR;15”,“RGBA;L”)。

Image.putpixel(xy, value)[源代码]#

修改给定位置的像素。对于单波段图像,颜色被指定为单个数值,而对于多波段图像,颜色被指定为元组。除此之外,P和PA图像还接受RGB和RGBA元组。

请注意,此方法相对较慢。要进行更广泛的更改,请使用 paste()ImageDraw 模块代替。

参见:

参数:
  • xy -- 像素坐标,表示为(x,y)。见 坐标系 .

  • value -- 像素值。

Image.quantize(colors=256, method=None, kmeans=0, palette=None, dither=Dither.FLOYDSTEINBERG)[源代码]#

使用指定的颜色数将图像转换为“p”模式。

参数:
返回:

新形象

Image.reduce(factor, box=None)[源代码]#

返回缩小的图像的副本 factor 泰晤士报。如果图像的大小不能被 factor ,则结果大小将向上舍入。

参数:
  • factor -- 宽度和高度分别大于0的整数或两个整数的元组。

  • box -- 提供要缩小的源图像区域的可选4元组整数。这些值必须在 (0, 0, width, height) 矩形。如果省略或 None ,则使用整个源。

Image.remap_palette(dest_map, source_palette=None)[源代码]#

重写图像以重新排序调色板。

参数:
  • dest_map -- 原始调色板中的索引列表。例如: [1,0] 将交换一个包含两个项目的调色板,并且 list(range(256)) 就是同一性变换。

  • source_palette -- 字节或无。

返回:

Image 对象。

Image.resize(size, resample=None, box=None, reducing_gap=None)[源代码]#

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

参数:
  • size -- 以像素为单位的请求大小,作为2元组:(宽度、高度)。

  • resample -- 可选的重采样过滤器。这可以是以下之一 Resampling.NEARESTResampling.BOXResampling.BILINEARResampling.HAMMINGResampling.BICUBICResampling.LANCZOS 。如果图像具有模式“1”或“P”,则始终将其设置为 Resampling.NEAREST 。如果图像模式指定位数,如“i;16”,则默认筛选器为 Resampling.NEAREST 。否则,默认筛选器为 Resampling.BICUBIC 。请参见: 过滤器

  • box -- 一个可选的4元组浮点数,提供要缩放的源图像区域。值必须在(0,0,宽度,高度)矩形内。如果省略或没有,则使用整个源。

  • reducing_gap -- 通过两步调整图像大小来应用优化。首先,使用 reduce() . 其次,使用常规重采样调整大小。最后一步改变大小不小于 reducing_gap 时代。 reducing_gap 可以是“无”(不执行第一步)或应大于1.0。更大的 reducing_gap ,结果越接近公平再采样。较小的 reducing_gap ,调整大小的速度越快。与 reducing_gap 大于或等于3.0时,在大多数情况下,结果与公平重采样没有区别。默认值为“无”(无优化)。

返回:

Image 对象。

这会调整给定图像的大小 (width, height)(width/2, height/2) **

from PIL import Image

with Image.open("hopper.jpg") as im:

    # Provide the target width and height of the image
    (width, height) = (im.width // 2, im.height // 2)
    im_resized = im.resize((width, height))
Image.rotate(angle, resample=Resampling.NEAREST, expand=0, center=None, translate=None, fillcolor=None)[源代码]#

返回此图像的旋转副本。此方法返回此图像的副本,围绕其中心逆时针旋转给定的度数。

参数:
  • angle -- 逆时针角度。

  • resample -- 可选的重采样过滤器。这可以是以下之一 Resampling.NEAREST (使用最近的邻居), Resampling.BILINEAR (2x2环境中的线性内插),或 Resampling.BICUBIC (4x4环境中的三次样条线插值)。如果省略,或者如果图像具有模式“1”或“P”,则将其设置为 Resampling.NEAREST 。看见 过滤器

  • expand -- 可选扩展标志。如果为真,则展开输出图像,使其足够大以容纳整个旋转图像。如果为false或省略,则使输出图像与输入图像大小相同。请注意,展开标志假定围绕中心旋转,不进行平移。

  • center -- 可选旋转中心(2元组)。原点是左上角。默认为图像的中心。

  • translate -- 可选的后旋转翻译(2元组)。

  • fillcolor -- 旋转图像外部区域的可选颜色。

返回:

Image 对象。

这会将输入图像旋转 theta 逆时针方向度::

from PIL import Image

with Image.open("hopper.jpg") as im:

    # Rotate the image by 60 degrees counter clockwise
    theta = 60
    # Angle is in degrees counter clockwise
    im_rotated = im.rotate(angle=theta)
Image.save(fp, format=None, **params)[源代码]#

在给定文件名下保存此图像。如果未指定格式,则可以从文件扩展名确定要使用的格式(如果可能)。

关键字选项可用于向编写器提供附加说明。如果一个作家不认识一个选项,它就会被默默地忽略。可用选项在 image format documentation 对于每个作家。

可以使用文件对象而不是文件名。在这种情况下,必须始终指定格式。文件对象必须实现 seektellwrite 方法,并以二进制模式打开。

参数:
  • fp -- 文件名(字符串)、pathlib.path对象或文件对象。

  • format -- 可选格式替代。如果省略,则使用的格式由文件扩展名决定。如果使用的是文件对象而不是文件名,则应始终使用此参数。

  • params -- 图像编写器的额外参数。

返回:

没有

抛出:
  • ValueError -- 如果无法从文件名确定输出格式。使用“格式”选项解决此问题。

  • OSError -- 如果无法写入文件。文件可能已创建,并且可能包含部分数据。

Image.seek(frame)[源代码]#

查找此序列文件中的给定帧。如果在序列结尾之外查找,该方法将引发 EOFError 例外。打开序列文件时,库自动查找第0帧。

tell() .

如果定义了, n_frames 指可用帧数。

参数:

frame -- 帧编号,从0开始。

抛出:

EOFError -- 如果调用试图在序列结束后查找。

Image.show(title=None)[源代码]#

显示此图像。此方法主要用于调试目的。

此方法调用 PIL.ImageShow.show() 内部。你可以用 PIL.ImageShow.register() 重写其默认行为。

图像首先保存到临时文件中。默认情况下,它将采用PNG格式。

在Unix上,然后使用 xdg-opendisplaygmeogxv 实用程序,取决于可以找到哪个实用程序。

在macOS上,图像是用本机预览应用程序打开的。

在Windows上,使用标准PNG显示实用程序打开图像。

参数:

title -- 在可能的情况下,用于图像窗口的可选标题。

Image.split()[源代码]#

将此图像拆分为单独的带区。此方法从图像返回单个图像带的元组。例如,分割一个“RGB”图像将创建三个新图像,每个新图像包含一个原始带区(红色、绿色、蓝色)的副本。

如果你只需要一个波段, getchannel() 方法更方便快捷。

返回:

包含波段的元组。

Image.tell()[源代码]#

返回当前帧号。见 seek() .

如果定义了, n_frames 指可用帧数。

返回:

帧编号,从0开始。

Image.thumbnail(size, resample=Resampling.BICUBIC, reducing_gap=2.0)[源代码]#

将此图像制作成缩略图。此方法修改图像以包含不大于给定大小的自身缩略图版本。此方法计算适当的缩略图大小以保留图像的方面,调用 draft() 方法来配置文件读取器(如果适用),并最终调整图像的大小。

请注意,此函数修改 Image 对象就位。如果还需要使用全分辨率图像,请将此方法应用于 copy() 原始图像的。

参数:
  • size -- 以像素为单位的请求大小,作为2元组:(宽度、高度)。

  • resample -- 可选的重采样过滤器。这可以是以下之一 Resampling.NEARESTResampling.BOXResampling.BILINEARResampling.HAMMINGResampling.BICUBICResampling.LANCZOS 。如果省略,则默认为 Resampling.BICUBIC 。(曾是 Resampling.NEAREST 2.5.0之前的版本)。请参见: 过滤器

  • reducing_gap -- 通过两步调整图像大小来应用优化。首先,使用 reduce()draft() 对于JPEG图像。其次,使用常规重采样调整大小。最后一步改变大小不小于 reducing_gap 时代。 reducing_gap 可以是“无”(不执行第一步)或应大于1.0。更大的 reducing_gap ,结果越接近公平再采样。较小的 reducing_gap ,调整大小的速度越快。与 reducing_gap 大于或等于3.0时,在大多数情况下,结果与公平重采样没有区别。默认值为2.0(非常接近公平重采样,但在许多情况下仍然更快)。

返回:

没有

Image.tobitmap(name='image')[源代码]#

返回转换为x11位图的图像。

备注

此方法仅适用于模式“1”图像。

参数:

name -- 用于位图变量的名称前缀。

返回:

包含x11位图的字符串。

抛出:

ValueError -- 如果模式不是“1”

Image.tobytes(encoder_name='raw', *args)[源代码]#

以字节对象的形式返回图像。

警告

此方法从内部存储器返回原始图像数据。对于压缩图像数据(如PNG、JPEG),请使用 save() ,内存中的数据带有一个bytesio参数。

参数:
  • encoder_name -- 使用什么编码器。默认情况下,使用标准的“原始”编码器。中的函数数组的codecs部分下可以看到C编码器的列表 _imaging.c 。在相关插件中注册了Python编码器。

  • args -- 编码器的额外参数。

返回:

A bytes 对象。

Image.transform(size, method, data=None, resample=Resampling.NEAREST, fill=1, fillcolor=None)[源代码]#

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

参数:
  • size -- 以像素为单位的输出大小,以二元组形式表示:(宽度、高度)。

  • method -- 变换法。这是其中之一 Transform.EXTENT (切出一个矩形子区域), Transform.AFFINE (仿射变换), Transform.PERSPECTIVE (透视变换)、 Transform.QUAD (将四边形映射到矩形),或 Transform.MESH (在一次操作中映射多个源四边形)。它也可能是一种 ImageTransformHandler Object::Class Example(Image.ImageTransformHandler):def Transform(self,Size,Data,Resample,Fill=1):#返回结果它也可以是具有 method.getdata 方法,该方法返回提供新的 methoddata 值::类示例:def getdata(Self):方法=Image.Transform.EXTENT Data=(0,0,100,100)返回方法,数据

  • data -- 转换方法的额外数据。

  • resample -- 可选的重采样过滤器。它可以是以下之一 Resampling.NEAREST (使用最近的邻居), Resampling.BILINEAR (2x2环境中的线性内插),或 Resampling.BICUBIC (4x4环境中的三次样条线插值)。如果省略,或者如果图像具有模式“1”或“P”,则将其设置为 Resampling.NEAREST 。请参见: 过滤器

  • fill -- 如果 method 是一种 ImageTransformHandler 对象,这是传递给它的参数之一。否则,它将处于未使用状态。

  • fillcolor -- 输出图像中转换外部区域的可选填充颜色。

返回:

Image 对象。

Image.transpose(method)[源代码]#

转置图像(以90度的步幅翻转或旋转)

参数:

method -- 其中之一 Transpose.FLIP_LEFT_RIGHTTranspose.FLIP_TOP_BOTTOMTranspose.ROTATE_90Transpose.ROTATE_180Transpose.ROTATE_270Transpose.TRANSPOSETranspose.TRANSVERSE

返回:

返回此图像的翻转或旋转副本。

这将通过使用 Transpose.FLIP_LEFT_RIGHT 方法。**

from PIL import Image

with Image.open("hopper.jpg") as im:

    # Flip the image from left to right
    im_flipped = im.transpose(method=Image.Transpose.FLIP_LEFT_RIGHT)
    # To flip the image from top to bottom,
    # use the method "Image.Transpose.FLIP_TOP_BOTTOM"
Image.verify()[源代码]#

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

Image.load()[源代码]#

为图像分配存储空间并加载像素数据。在正常情况下,不需要调用此方法,因为当首次访问打开的图像时,Image类会自动加载该图像。

如果与图像相关联的文件是通过 Pillow 打开的,那么此方法将关闭它。例外情况是如果图像有多个帧,在这种情况下,文件将保持打开状态以进行查找操作。见 Pillow中的文件处理 更多信息。

返回:

图像访问对象。

返回类型:

PixelAccess 等级 or PIL.PyAccess

Image.close()[源代码]#

如果可能,关闭文件指针。

此操作将破坏图像核心并释放其内存。之后图像数据将无法使用。

关闭具有多个帧的图像或尚未读取并关闭其文件的图像时,需要使用此函数 load() 方法。看见 Pillow中的文件处理 了解更多信息。

图像属性#

的实例 Image 类具有以下属性:

Image.filename: str#

源文件的文件名或路径。仅使用工厂功能创建的图像 open 具有文件名属性。如果输入是类似文件的对象,则将文件名属性设置为空字符串。

Image.format: str | None#

源文件的文件格式。对于库本身创建的图像(通过工厂函数或通过对现有图像运行方法),此属性设置为 None .

Image.mode: str#

图像模式。这是一个指定图像使用的像素格式的字符串。典型值为“1”、“l”、“rgb”或“cmyk”。请参见 模式 完整的列表。

Image.size: tuple[int]#

图像大小(像素)。大小以2元组(宽度、高度)表示。

Image.width: int#

图像宽度,以像素为单位。

Image.height: int#

图像高度,以像素为单位。

Image.palette: PIL.ImagePalette.ImagePalette | None#

调色板表(如有)。如果模式为“P”或“PA”,则这应该是 ImagePalette 班级。否则,应将其设置为 None .

Image.info: dict#

保存与图象有关的数据的字典。文件处理程序使用此字典传递从文件中读取的各种非图像信息。有关详细信息,请参阅各种文件处理程序的文档。

大多数方法在返回新图像时忽略字典;由于键没有标准化,因此方法不可能知道操作是否影响字典。如果以后需要这些信息,请保留对从open方法返回的信息字典的引用。

除非另有说明,否则本词典不影响保存文件。

Image.is_animated: bool#

True 如果此图像有多个帧,或 False 否则。

此属性仅由支持动画图像的图像插件定义。如果插件不支持加载动画图像,即使给定的格式支持动画图像,插件也可能不定义该属性。

假定该属性不是所有图像都可以使用的 getattr(image, "is_animated", False) 检查枕头是否意识到图像中的多个帧,而不管其格式如何。

参见

n_frames, seek() and tell()

Image.n_frames: int#

此图像中的帧数。

此属性仅由支持动画图像的图像插件定义。如果插件不支持加载动画图像,即使给定的格式支持动画图像,插件也可能不定义该属性。

假定该属性不是所有图像都可以使用的 getattr(image, "n_frames", 1) 检查枕头在图像中识别的帧数,而不管图像的格式如何。

参见

is_animated, seek() and tell()

Classes#

class PIL.Image.Exif[源代码]#

基类:MutableMapping

此类提供对EXIF图像数据的读写访问权限::

from PIL import Image
im = Image.open("exif.png")
exif = im.getexif()  # Returns an instance of this class

信息可以读写、迭代或删除::

print(exif[274])  # 1
exif[274] = 2
for k, v in exif.items():
  print("Tag", k, "Value", v)  # Tag 274 Value 2
del exif[274]

为了访问IFD0之外的信息, get_ifd() 返回词典::

from PIL import ExifTags
im = Image.open("exif_gps.jpg")
exif = im.getexif()
gps_ifd = exif.get_ifd(ExifTags.IFD.GPSInfo)
print(gps_ifd)

其他IFD包括 ExifTags.IFD.ExifExifTags.IFD.MakernoteExifTags.IFD.InteropExifTags.IFD.IFD1

ExifTags 还具有为数据提供名称的枚举类::

print(exif[ExifTags.Base.Software])  # PIL
print(gps_ifd[ExifTags.GPS.GPSDateStamp])  # 1999:99:99 99:99:99
bigtiff = False#
endian = None#
get_ifd(tag)[源代码]#
hide_offsets()[源代码]#
load(data)[源代码]#
load_from_fp(fp, offset=None)[源代码]#
tobytes(offset=8)[源代码]#
class PIL.Image.ImagePointHandler[源代码]#

用作点变换的混合(用于 point() )

class PIL.Image.ImageTransformHandler[源代码]#

用作几何变换的混合(用于 transform() )

常量#

PIL.Image.NONE#
PIL.Image.MAX_IMAGE_PIXELS#

对于图像,设置为24gb(24bp0),约为84bp0。看到了吗 open() 有关如何使用此选项的详细信息。

转置方法#

用于指定 Image.transpose() 要使用的方法。

class PIL.Image.Transpose(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[源代码]#
FLIP_LEFT_RIGHT = 0#
FLIP_TOP_BOTTOM = 1#
ROTATE_180 = 3#
ROTATE_270 = 4#
ROTATE_90 = 2#
TRANSPOSE = 5#
TRANSVERSE = 6#

变换方法#

用于指定 Image.transform() 要使用的方法。

class PIL.Image.Transform[源代码]#
AFFINE#

仿射变换

EXTENT#

切出矩形分区

PERSPECTIVE#

透视变换

QUAD#

将四边形映射到矩形

MESH#

在一次操作中映射多个源四边形

重采样过滤器#

过滤器 有关详细信息。

class PIL.Image.Resampling(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[源代码]
BICUBIC = 3
BILINEAR = 2
BOX = 4
HAMMING = 5
LANCZOS = 1
NEAREST = 0

抖动模式#

用于指定要用于 convert()quantize() 方法。

class PIL.Image.Dither[源代码]#
NONE#

没有抖动

ORDERED#

未实施

RASTERIZE#

未实施

FLOYDSTEINBERG#

弗洛伊德·斯坦伯格颤抖着

调色板#

用于指定要用于 convert() 方法。

class PIL.Image.Palette(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[源代码]#
ADAPTIVE = 1#
WEB = 0#

量化方法#

用于指定要用于 quantize() 方法。

class PIL.Image.Quantize[源代码]#
MEDIANCUT#

中间切割。默认方法,RGBA图像除外。此方法不支持RGBA图像。

MAXCOVERAGE#

最大覆盖范围。此方法不支持RGBA图像。

FASTOCTREE#

快速八叉树。RGBA图像的默认方法。

LIBIMAGEQUANT#

libimagequant公司

使用检查支架 PIL.features.check_feature() 具有 feature="libimagequant" .