图像文件格式#

python图像库支持各种各样的栅格文件格式。库可以识别和读取30多种不同的文件格式。写支持不那么广泛,但支持最常见的交换和表示格式。

这个 open() 函数从文件的内容中标识文件,而不是文件名,而是 save() 方法检查名称以确定要使用的格式,除非显式给定了该格式。

从文件打开图像时,只有该图像的实例被视为具有该格式。图像的副本将包含从文件加载的数据,但不包含文件本身,这意味着它不再被视为原始格式。所以如果 copy() ,或者另一个方法在内部创建该图像的副本,则特定于该格式的任何方法或属性将不再存在。这个 fp (文件指针)属性将不再存在,并且 format 属性将是 None 。

完全支持的格式#

BLP#

BLP是暴雪mipmap格式,是魔兽世界中使用的一种纹理格式。 Pillow 支撑阅读 JPEG 压缩或未加工 BLP1 图像和所有类型的 BLP2 图像。

储蓄#

枕头支持写入BLP图像。这个 save() 方法可以采用以下关键字参数:

blp_version

如果存在并设置为“BLP1”,则图像将另存为BLP1。否则,图像将保存为BLP2。

BMP#

Pillow读写Windows和OS/2 BMP文件,其中包含 1 , L , P ,或 RGB 数据。16色图像读作 P 图像。在Pillow 9.1.0中添加了对读取8位游程编码的支持。在Pillow 9.3.0中添加了对读取4位游程编码的支持。

打开#

这个 open() 方法设置以下内容 info 性能:

compression

如果文件是256色游程长度编码图像,则设置为1。如果文件是16色游程长度编码图像,则设置为2。

DDS#

DDS是视频游戏中使用的一种流行的容器纹理格式,并且受到DirectX的本地支持。未压缩的RGB和RGBA可以读取和(从8.3.0开始)写入。DXT1、DXT3(从3.4.0开始)和DXT5像素格式只能在 RGBA 模式。

DIB#

Pillow读取和写入DIB文件。DIB文件与BMP文件类似,因此请参见上面的内容了解更多信息。

在 6.0.0 版本加入.

EPS#

Pillow 识别包含图像数据的EPS文件,并可以读取包含嵌入栅格图像(图像数据描述符)的文件。如果ghostscript可用,也可以读取其他eps文件。EPS驱动程序也可以写入EPS图像。EPS驱动程序可以在 L , LAB , RGB 和 CMYK 模式,但ghostscript可以将图像转换为 RGB 模式,而不是将它们保留在原始颜色空间中。EPS驱动程序可以写入图像 L , RGB 和 CMYK 模式。

装载量#

如果Ghostscript可用,您可以调用 load() 方法,以影响Ghostscript呈现EPS的方式

scale

影响生成的栅格化图像的比例。如果eps建议以100px x 100px渲染图像,则将此参数设置为2将使ghostscript渲染200px x 200px图像。边界框的相对位置保持为:

im = Image.open(...)
im.size  # (100,100)
im.load(scale=2)
im.size  # (200,200)
transparency

如果为true,则生成透明背景的RGBA图像,而不是白色背景的RGB图像的默认行为。

GIF#

Pillow读取GIF文件格式的GIF87a和GIF89a版本。默认情况下,库使用GIF87a写入文件,除非使用了GIF89a功能或GIF89a已在使用中。文件使用LZW编码写入。

GIF文件最初以灰度形式读取 (L )或调色板模式 (P )图像。中的后续帧 P 图像将图像更改为 RGB (或 RGBA 如果第一帧具有透明度)。

P 模式图像将更改为 RGB 因为GIF的每一帧可能包含其自己的最多256色的单独调色板。当将新帧放置到前一帧上时,这些颜色可能组合在一起以超过 P 模式限制为256色。相反,该图像被转换为 RGB 处理这件事。

如果您想要第一个 P 待处理的图像帧 RGB 同样,这样每一个人 P 帧被转换为 RGB 或 RGBA 模式下,有一个可用的设置::

from PIL import GifImagePlugin
GifImagePlugin.LOADING_STRATEGY = GifImagePlugin.LoadingStrategy.RGB_ALWAYS

然而,GIF框架并不总是包含单独的调色板。如果只有一个全局调色板,则所有颜色都可以在 P 模式。如果您希望将这些帧保留为 P 在这种情况下,还可以使用以下设置:

from PIL import GifImagePlugin
GifImagePlugin.LOADING_STRATEGY = GifImagePlugin.LoadingStrategy.RGB_AFTER_DIFFERENT_PALETTE_ONLY

要恢复默认行为,请执行以下操作 P 模式图像仅转换为 RGB 或 RGBA 在第一帧之后::

from PIL import GifImagePlugin
GifImagePlugin.LOADING_STRATEGY = GifImagePlugin.LoadingStrategy.RGB_AFTER_FIRST

打开#

这个 open() 方法设置以下内容 info 性能:

background

默认背景色(调色板颜色索引)。

transparency

透明度颜色索引。如果图像不透明,则省略此键。

version

版本(或 GIF87a 或 GIF89a )

duration

可能不存在。显示GIF当前帧的时间(毫秒)。

loop

可能不存在。GIF循环的次数。0表示它将永远循环。

comment

可能不存在。关于这张图片的评论。这是在当前帧图像之前找到的最后一个注释。

extension

可能不存在。包含特定于应用程序的信息。

读取序列#

GIF加载程序支持 seek() 和 tell() 方法。您可以将这些方法组合到下一帧 (im.seek(im.tell() + 1) )

im.seek() 提出一个 EOFError 如果你试图寻找最后一帧。

储蓄#

打电话时 save() 要写入GIF文件,可以使用以下选项:

im.save(out, save_all=True, append_images=[im1, im2, ...])
save_all

如果存在且为真,则将保存图像的所有帧。如果没有,则只保存多帧图像的第一帧。

append_images

要附加为附加帧的图像列表。列表中的每个图像可以是单帧或多帧图像。目前支持GIF、PDF、PNG、TIFF和WebP。

ICO和ICNS也支持它。如果传入相关大小的图像,则将使用它们,而不是缩小主图像。

include_color_table

是否包括本地颜色表。

interlace

图像是否交错。默认情况下,除非图像的宽度或高度小于16像素。

disposal

指示图形显示后的处理方式。

  • 0-未指定处置。

  • 1-不要丢弃。

  • 2-还原为背景色。

  • 3-还原到以前的内容。

为常量释放传递一个整数,或传递一个列表或元组,分别为每个帧设置释放。

palette

对保存的图像使用指定的调色板。调色板应该是一个字节或字节数组对象,其中包含rgbrgb中的调色板条目…形式。不应超过768字节。或者,调色板可以作为 PIL.ImagePalette.ImagePalette 对象。

optimize

如果存在且为真,则尝试通过消除未使用的颜色来压缩调色板。只有当调色板可以压缩到2个元素的下一个较小的幂次方时,这才有用。

请注意,如果要保存的图像来自现有的GIF,则它的 info 字典。对于这些选项,如果不传递它们,它们将默认为 info 价值观。

transparency

透明度颜色索引。

duration

多帧GIF每帧的显示持续时间(毫秒)。为一个常量持续时间传递一个整数,或者传递一个列表或元组来分别设置每个帧的持续时间。

loop

GIF应该循环的整数次。0表示它将永远循环。如果省略或 None ,则图像不会循环。

comment

关于图像的评论。

读取本地图像#

GIF加载器创建与GIF文件相同大小的图像内存 logical screen size ,并粘贴实际的像素数据( local image )添加到此图像中。如果您只想要实际的像素矩形,可以裁剪图像::

im = Image.open(...)

if im.tile[0][0] == "gif":
    # only read the first "local image" from this GIF file
    box = im.tile[0][1]
    im = im.crop(box)

ICNS#

枕头读写MacOS .icns 文件。默认情况下,最大的可用图标为Read,不过您可以通过设置 size 属性,然后调用 load() 。这个 open() 方法设置以下内容 info 属性:

备注

在8.3.0之前的版本中,Pillow只能在MacOS上写入ICNS文件。

sizes

此图标文件中的支持大小列表;这些是3元组, (width, height, scale) 在哪里 scale 视网膜图标为2,标准图标为1。你 are 允许使用此3元组格式 size 属性,如果在调用前设置 load() ;加载后,大小将重置为包含像素尺寸的2元组(例如,如果您要求 (512, 512, 2) ,的最终值 size 将 (1024, 1024) )

储蓄#

这个 save() 方法可以采用以下关键字参数:

append_images

用于替换图像的缩小版本的图像列表。图像的顺序并不重要,因为它们的使用取决于每个图像的大小。

在 5.1.0 版本加入.

ICO#

ICO用于在窗口上存储图标。将读取最大的可用图标。

储蓄#

这个 save() 方法支持以下选项:

sizes

包括在这个ICO文件中的大小列表;这是一个2元组, (width, height) 默认为 [(16, 16), (24, 24), (32, 32), (48, 48), (64, 64), (128, 128), (256, 256)] . 任何大于原始大小或256的大小都将被忽略。

这个 save() 方法可以采用以下关键字参数:

append_images

用于替换图像的缩小版本的图像列表。图像的顺序并不重要,因为它们的使用取决于每个图像的大小。

在 8.1.0 版本加入.

bitmap_format

默认情况下,图像数据将以PNG格式保存。位图格式为“BMP”时,图像数据将改为以BMP格式保存。

在 8.3.0 版本加入.

IM#

IM是Labeye和其他基于ifunc图像处理库的应用程序使用的格式。库读取和写入此格式的大多数未压缩的交换版本。

IM是唯一可以存储所有内部Pillow格式的格式。

JPEG#

Pillow 读取包含 L , RGB 或 CMYK 数据。它编写标准和渐进的JFIF文件。

使用 draft() 方法,您可以通过转换 RGB 图像到 L ,并在加载图像时将其大小调整为原始大小的1/2、1/4或1/8。

默认情况下,Pillow不允许加载截断的JPEG文件,设置 ImageFile.LOAD_TRUNCATED_IMAGES 来替代这个。

打开#

这个 open() 方法可以设置以下内容 info 属性(如果可用):

jfif

找到JFIF应用程序标记。如果文件不是JFIF文件,则此密钥不存在。

jfif_version

表示JFIF版本(主版本、次版本)的元组。

jfif_density

表示图像像素密度的元组,以jfif_单位指定的单位表示。

jfif_unit

jfif_密度的单位:

  • 0 -没有单位

  • 每英寸1-像素

  • 每厘米2像素

dpi

一个元组,表示报告的像素密度(以每英寸像素为单位),如果文件是JFIF文件,单位为英寸。

adobe

找到Adobe应用程序标记。如果文件不是Adobe JPEG文件,则此密钥不存在。

adobe_transform

供应商特定标签。

progression

指示这是一个渐进式JPEG文件。

icc_profile

图像的ICC颜色配置文件。

exif

来自图像的原始exif数据。

comment

关于图像的评论。

在 7.1.0 版本加入.

储蓄#

这个 save() 方法支持以下选项:

quality

图像质量,范围从0(最差)到95(最好),或字符串 keep 。默认值为75。应避免大于95的值;如果值超过100,则会禁用JPEG压缩算法的部分内容,并会导致图像质量几乎没有任何改善的大文件。它的价值 keep 仅对JPEG文件有效,并将保留原始图像质量级别、二次采样和qtable。

optimize

如果存在且为真,则表示编码器应额外传递图像以选择最佳编码器设置。

progressive

如果存在且为真,则表示此图像应存储为渐进式jpeg文件。

dpi

表示像素密度的整数元组, (x,y) .

icc_profile

如果存在且为真,图像将与提供的ICC配置文件一起存储。如果未提供此参数,则保存图像时不会附加配置文件。要保留现有配置文件,请执行以下操作:

im.save(filename, 'jpeg', icc_profile=im.info.get('icc_profile'))
exif

如果存在,图像将与提供的原始exif数据一起存储。

subsampling

如果存在,设置编码器的子采样。

  • keep :仅对jpeg文件有效,将保留原始图像设置。

  • 4:4:4 , 4:2:2 , 4:2:0 :特定采样值

  • 0: equivalent to 4:4:4

  • 1: equivalent to 4:2:2

  • 2: equivalent to 4:2:0

如果没有,设置将由libjpeg或libjpeg-turbo确定。

qtables

如果存在,设置编码器的qtables。这被列为jpeg文档中向导的高级选项。小心使用。 qtables 可以是以下几种值之一:

  • 用于命名预设的字符串,例如 keep , web_low 或 web_high

  • 64个整数列表的列表、元组或字典(整数键=范围(len(keys))。必须有2到4张桌子。

在 2.5.0 版本加入.

comment

关于图像的评论。

在 9.4.0 版本加入.

备注

要启用jpeg支持,您需要在构建python图像库之前构建和安装ijg jpeg库。有关详细信息,请参阅分发自述文件。

JPEG 2000#

在 2.4.0 版本加入.

Pillow 读取和写入包含 L , LA , RGB 或 RGBA 数据。它还可以读取包含 YCbCr 数据,在读取时转换为 RGB 或 RGBA 取决于是否有alpha通道。 Pillow 支持jpeg 2000原始代码流( .j2k 文件)以及装箱的jpeg 2000文件( .j2p 或 .jpx 文件)。 Pillow not 支持组件采样频率不同的文件。

加载时,如果设置 mode 在图像上 load() 方法,您可以要求 Pillow 将图像转换为 RGB 或 RGBA 而不是自己选择。也可以设置 reduce 到要丢弃的分辨率数(每个分辨率将生成的图像的大小减少2倍),以及 layers 指定要加载的质量层的数量。

储蓄#

这个 save() 方法支持以下选项:

offset

图像偏移量,作为整数的元组,例如(16,16)

tile_offset

平铺偏移量,同样是整数的2元组。

tile_size

平铺大小为2元组。如果未指定,或设置为“无”,则将保存图像而不平铺。

quality_mode

要么 "rates" 或 "dB" 取决于要用于指定图像质量的单位。

quality_layers

一个数字序列,每一个数字代表一个近似的尺寸缩减(如果质量模式是 "rates" )或以分贝为单位的信噪比值。如果未指定,则默认为全质量的单层。

num_resolutions

要存储的不同图像分辨率的数量(对应于离散小波变换分解的数量加上一个)。

codeblock_size

代码块大小为2元组。最小尺寸为4 x 4,最大尺寸为1024 x 1024,附加的限制是代码块的系数不得超过4096(即两个数字的乘积不得超过4096)。

precinct_size

区域大小为2元组。必须是两个轴上的二次幂,并且必须大于代码块大小。

irreversible

如果 True ,使用有损离散波形变换DWT 9-7。默认为 False ,它使用无损的DWT 5-3。

mct

如果 1 然后在编码时启用多分量转换,否则使用 0 表示无组件变换(默认)。如果启用了MCT,并且 irreversible 是 True 则将应用不可逆颜色转换,否则编码将使用可逆颜色转换。MCT最适合与 mode 的 RGB 并且仅当图像数据具有3个分量时才适用。

在 9.1.0 版本加入.

progression

控制进展顺序;必须是 "LRCP" , "RLCP" , "RPCL" , "PCRL" , "CPRL" . 字母分别代表组件、位置、分辨率和层,并控制编码顺序,其思想是,例如,使用lrcp模式编码的图像可以在到达解码器时对其质量层进行解码,而使用rlcp模式编码的图像在到达解码器时将具有增加的解码分辨率,等等。

signed

如果为True,则告诉编码器将图像另存为签名。

在 9.4.0 版本加入.

cinema_mode

设置编码器以产生符合数字电影规格的输出。这里的选项是 "no" (违约), "cinema2k-24" 24FPS 2K, "cinema2k-48" 对于48fps 2K,以及 "cinema4k-24" 对于24fps 4K。请注意,对于兼容的2K文件, at least one 您的图像尺寸必须与2048 x 1080匹配,而对于兼容的4K文件, at least one 尺寸必须与4096 x 2160匹配。

no_jp2

如果 True 则在保存时不要将原始码流包装为JP2文件格式,否则将使用文件的扩展名来确定格式(默认)。

在 9.1.0 版本加入.

comment

向文件添加自定义注释,替换默认的“由OpenJPEG版本创建”注释。

在 9.5.0 版本加入.

plt

如果 True 并且OpenJPEG2.4.0或更高版本可用,则在生成的文件中包括一个PLT(数据包长度,平铺部分报头)标记。默认为 False 。

在 9.5.0 版本加入.

备注

要启用jpeg 2000支持,您需要在构建Python图像库之前构建并安装Openjpeg库(2.0.0或更高版本)。

Windows用户可以安装openjpeg网站上提供的openjpeg二进制文件,但必须将其添加到路径中才能使用 Pillow (如果这样做失败,则会出现无法加载 _imaging DLL)。

MSP#

Pillow识别和读取来自Windows1和2的MSP文件。库写入此格式的未压缩(Windows 1)版本。

PCX#

Pillow 读取和写入包含 1 , L , P 或 RGB 数据。

PNG#

Pillow 识别、读取和写入包含 1 , L , LA , I , P , RGB 或 RGBA 数据。从v1.1.7开始支持交错文件。

从枕头6.0开始,可以从PNG图像读取exif数据。但是,与其他图像格式不同的是,exif数据不能保证存在于 info 直到 load() 已被调用。

默认情况下,Pillow不允许加载截断的PNG文件,设置 ImageFile.LOAD_TRUNCATED_IMAGES 来替代这个。

打开#

这个 open() 函数设置以下内容 info 适当时的属性:

chromaticity

色度点,作为浮点数的8元组。( White Point X , White Point Y , Red X , Red Y , Green X , Green Y , Blue X , Blue Y )

gamma

gamma,作为浮点数给出。

srgb

sRGB呈现意图为整数。

  • 0感性

  • 1相对比色法

  • 2饱和度

  • 3绝对比色法

transparency

为了 P 图像:全透明像素的调色板索引,或每个调色板条目的带alpha值的字节字符串。

为了 1 , L , I 和 RGB 图像,表示此图像中完全透明像素的颜色。

如果图像不是透明调色板图像,则省略此键。

open 也设置 Image.text 一本关于 tEXt , zTXt 和 iTXt PNG图像的块。单个压缩块的解压缩大小限制为 PngImagePlugin.MAX_TEXT_CHUNK 默认为1MB,以防止减压炸弹。此外,所有文本块的总大小限制为 PngImagePlugin.MAX_TEXT_MEMORY ,默认为64MB。

储蓄#

这个 save() 方法支持以下选项:

optimize

如果存在且为真,则指示PNG编写器使输出文件尽可能小。这包括额外的处理,以便找到最佳的编码器设置。

transparency

为了 P , 1 , L , I 和 RGB 图像,此选项控制图像中要标记为透明的颜色。

为了 P 图像,这可以是调色板索引,也可以是每个调色板条目都有alpha值的字节字符串。

dpi

在每个方向上对应于所需dpi的两个数的元组。

pnginfo

A PIL.PngImagePlugin.PngInfo 实例包含块。

compress_level

zlib压缩级别,介于0和9之间的数字:1表示最佳速度,9表示最佳压缩,0表示完全没有压缩。默认值为6。什么时候? optimize 选项是真的 compress_level 无效(无论传递的值如何,它都设置为9)。

icc_profile

要包含在已保存文件中的ICC配置文件。

exif

要包含在已保存文件中的exif数据。

在 6.0.0 版本加入.

位(实验)

为了 P 图像,此选项控制要存储的位数。如果省略,则PNG编写器使用8位(256色)。

字典(实验)

设置zlib编码器字典。

备注

要启用PNG支持,您需要在构建Python成像库之前构建并安装ZLIB压缩库。请参阅 installation documentation 有关详细信息,请参阅。

APNG序列#

PNG加载器对读写动画便携网络图形(APNG)文件的支持有限。加载APNG文件时, get_format_mimetype() 将返回 "image/apng" . 的值 is_animated 财产将是 True 当 n_frames 属性大于1。对于APNG文件 n_frames 是否存在动画以及是否存在这两种情况都取决于默认的帧数。见 default_image 更多详细信息,请参阅下面的属性文档。这个 seek() 和 tell() 支持方法。

im.seek() 提出一个 EOFError 如果你试图寻找最后一帧。

这些 info 在适用的情况下,将为APNG设置以下属性:

default_image

指定此APNG文件是否包含单独的默认图像,该图像不是实际APNG动画的一部分。

当APNG文件包含默认图像时,初始加载的图像(即 seek(0) )将是默认图像。要说明默认图像的存在,则 n_frames 属性将设置为 frame_count + 1 在哪里 frame_count 是实际的APNG动画帧计数。要加载第一个APNG动画帧, seek(1) 必须被调用。

  • True -APNG包含默认图像,它不是动画帧。

  • False -APNG不包含默认图像。这个 n_frames 属性将设置为实际的APNG动画帧计数。最初加载的图像(即。 seek(0) )将是第一个APNG动画帧。

loop

循环此APNG的次数,0表示无限循环。

duration

显示此APNG帧的时间(毫秒)。

备注

apngloader返回的图像大小与APNG文件的逻辑屏幕大小相同。在应用任何APNG帧处理和帧混合操作后,返回的图像包含给定帧的像素数据(即,它包含web浏览器将为此帧呈现的内容-所有先前帧和此帧的合成)。

任何包含序列错误的APNG文件都将被视为无效图像。APNG加载程序不会尝试修复和重新排序包含序列错误的文件。

储蓄#

当呼叫时 save() 默认情况下,将仅存储单帧PNG文件。要保存APNG文件(包括单帧APNG), save_all 参数必须设置为 True 。还可以设置以下参数:

default_image

布尔值,指定基础图像是否为默认图像。如果 True ,基础映像将用作默认映像,并且 append_images 序列将是第一个APNG动画帧。如果 False ,基础图像将用作第一个APNG动画帧。默认为 False .

append_images

作为附加帧附加的图像的列表或元组。列表中的每个图像可以是单帧或多帧图像。每个帧的大小应该与基本图像的大小相匹配。另外请注意,如果帧的模式与基础图像的模式不匹配,则该帧将转换为基本图像模式。

loop

整数循环此APNG的次数,0表示无限循环。默认为0。

duration

整数(或整数的列表或元组)显示此APNG帧的时间长度(毫秒)。默认为0。

disposal

一个整数(或整数的列表或元组),指定在呈现下一帧之前要用于此帧的APNG处理操作。默认为0。

  • 0 (OP_NONE ,默认为)-在渲染下一帧之前不会对该帧进行任何处理。

  • 1 (PIL.PngImagePlugin.Disposal.OP_BACKGROUND )-在渲染下一帧之前,该帧的修改区域被清除为完全透明的黑色。

  • 2 (OP_PREVIOUS )-此帧的修改区域在渲染下一帧之前恢复为上一帧的内容。

blend

一个整数(或整数的列表或元组),指定要在呈现下一帧之前用于此帧的APNG混合操作。默认为0。

  • 0 (OP_SOURCE )-此帧的所有颜色分量(包括Alpha)将覆盖以前的输出图像内容。

  • 1 (OP_OVER )-此帧应与先前的输出图像内容进行Alpha合成。

备注

这个 duration , disposal 和 blend 参数可以设置为列表或元组,以指定动画中每个帧的值。列表或元组的长度必须与APNG动画中实际帧的总数相同。如果APNG包含默认图像(即。 default_image 设置为 True ),这些列表或元组参数不应包含默认图像的条目。

PPM#

Pillow读写包含以下内容的PBM、PGM、PPM和PNM文件 1 , L , I 或 RGB 数据。

“Raw”(P4至P6)格式可以读取,并在写入时使用。

从枕头9.2.0开始,“纯”(P1至P3)格式也可以阅读。

SGI#

Pillow 读写未压缩 L , RGB 和 RGBA 文件夹。

SPIDER#

Pillow读取和写入32位浮点数据的蜘蛛图像文件(“F;32F”)。

枕头还读取包含蜘蛛图像序列的蜘蛛堆栈文件。这个 seek() 和 tell() 支持方法,允许随机访问。

打开#

这个 open() 方法设置以下属性:

format

设置为 SPIDER

istack

如果文件是图像堆栈,则设置为1,否则设置为0。

n_frames

设置为堆栈中的图像数。

一种方便的方法, convert2byte() ,用于将浮点数据转换为字节数据(模式 L ):

im = Image.open("image001.spi").convert2byte()

储蓄#

spider文件的扩展名可以是任意3个字母数字字符。因此,必须明确指定输出格式:

im.save('newimage.spi', format='SPIDER')

有关Spider图像处理包的更多信息,请参阅https://github.com/spider-em/SPIDER

TGA#

Pillow 读写包含 L , LA , P , RGB 和 RGBA 数据。 Pillow 可以读写未压缩和运行长度编码的TGA。

储蓄#

这个 save() 方法可以采用以下关键字参数:

compression

如果设置为“TGA_RLE”,文件将进行游程长度编码。

在 5.3.0 版本加入.

id_section

标识字段。

在 5.3.0 版本加入.

orientation

如果存在且为正数,则第一个像素用于左上角,而不是左下角。

在 5.3.0 版本加入.

TIFF#

Pillow读写TIFF文件。它可以读取条纹图像和平铺图像,像素和平面交错多波段图像。如果您安装了libtiff及其头文件,那么bellow可以读写多种压缩的tiff文件。否则,Pillow只能读写未压缩的文件。

备注

从5.0.0版开始,Pillow需要libtiff读取或写入压缩文件。在该版本发布之前,Pillow支持在不使用libtiff的情况下读取packbits、lzw和jpeg压缩的tiff。

打开#

这个 open() 方法设置以下内容 info 性能:

compression

压缩模式。

在 2.0.0 版本加入.

dpi

图像分辨率 (xdpi, ydpi) tuple,如适用。你可以使用 tag 属性获取有关图像分辨率的详细信息。

在 1.1.5 版本加入.

resolution

图像分辨率 (xres, yres) tuple,如适用。这是以文件指定的单位为单位的度量。

在 1.1.5 版本加入.

这个 tag_v2 属性包含TIFF元数据字典。关键是数字索引 TiffTags.TAGS_V2 . 值是单个项的字符串或数字,在一个值元组中返回多个值。有理数返回为 IFDRational 对象。

在 3.0.0 版本加入.

为了与旧代码兼容,请 tag 属性包含版本3.0.0之前返回的已解码TIFF字段的字典。值作为数值的字符串或元组返回。有理数作为元组返回 (numerator, denominator) .

自 3.0.0 版本弃用.

读取多帧TIFF图像#

TIFF加载器支持 seek() 和 tell() 方法,获取并返回图像文件中的帧号。您可以组合这些方法以查找到下一帧 (im.seek(im.tell() + 1) )。帧的编号从0到 im.n_frames - 1 ,并且可以按任何顺序访问。

im.seek() 提出一个 EOFError 如果你试图寻找最后一帧。

储蓄#

这个 save() 方法可以采用以下关键字参数:

save_all

如果为真,Pillow将把图像的所有帧保存到多帧TIFF文档中。

在 3.4.0 版本加入.

append_images

附加为附加帧的图像列表。列表中的每个图像都可以是单帧或多帧图像。但是请注意,为了得到正确的结果,所有附加的图像都应该相同 encoderinfo 和 encoderconfig 性质。

在 4.2.0 版本加入.

tiffinfo

A ImageFileDirectory_v2 包含TIFF标记和值的对象或dict对象。TIFF字段类型是自动检测数值和字符串值的,任何其他类型都需要使用 ImageFileDirectory_v2 对象并设置输入 tagtype 具有适当的数值来自 TiffTags.TYPES .

在 2.3.0 版本加入.

应使用 IFDRational 对象。

在 3.1.0 版本加入.

为了与旧代码兼容,a ImageFileDirectory_v1 对象可以在此字段中传递。然而,这是不赞成的。

在 5.4.0 版本加入.

以前的版本在使用libtiff编写时只支持一些标记。支持的列表位于 TiffTags.LIBTIFF_CORE .

在 6.1.0 版本加入.

增加了对签名类型的支持(例如 TIFF_SIGNED_LONG )以及多个值。单个标记的多个值必须为 ImageFileDirectory_v2 作为元组并需要匹配的类型 tagtype 标记类型。

exif

将关键字替换为“tiffinfo”,以与其他格式保持一致。

在 8.4.0 版本加入.

compression

包含文件所需压缩方法的字符串。(仅在安装了libtiff的情况下有效)有效的压缩方法包括: None , "group3" , "group4" , "jpeg" , "lzma" , "packbits" , "tiff_adobe_deflate" , "tiff_ccitt" , "tiff_lzw" , "tiff_raw_16" , "tiff_sgilog" , "tiff_sgilog24" , "tiff_thunderscan" , "webp" , "zstd"

quality

jpeg压缩的图像质量,从0(最差)到100(最好)。默认值为75。

在 6.1.0 版本加入.

设置TIFF头字段的这些参数是使用TiffInfo提供的常规标记的替代方法。

description

software

date_time

artist

copyright

字符串

icc_profile

要包含在已保存文件中的ICC配置文件。

resolution_unit

一个整数。1表示无单位,2表示英寸,3表示厘米。

resolution

整数或浮点数,用于x和y分辨率。

x_resolution

整数或浮点数。

y_resolution

整数或浮点数。

dpi

一个元组 (x_resolution, y_resolution) ,以英寸为分辨率单位。为了与其他图像格式保持一致,dpi的x和y分辨率将舍入为最接近的整数。

韦伯#

Pillow读写webp文件。目前,这种形式Pillow功能的具体细节尚未记录在案。

储蓄#

这个 save() 方法支持以下选项:

lossless

如果存在且为真,则指示WebP编写器使用无损压缩。

quality

0-100的整数,默认为80。对于损耗,0表示最小尺寸,100表示最大尺寸。对于无损压缩,此参数是用于压缩的工作量:0是最快的,但与最慢但最好的100相比,它提供的文件更大。

method

质量/速度权衡(0=快,6=慢-好)。默认为4。

exact

如果为True,则保留透明的RGB值。否则,丢弃不可见的RGB值以获得更好的压缩效果。默认为False。需要libwebp 0.5.0或更高版本。

icc_profile

要包含在已保存文件中的ICC配置文件。仅当系统WebP库是使用WebPMUX支持构建时才受支持。

exif

要包含在已保存文件中的exif数据。仅当系统WebP库是使用WebPMUX支持构建时才受支持。

xmp

要包括在保存的文件中的XMP数据。仅当系统WebP库构建时具有Webpmux支持时才受支持。

保存序列#

备注

仅当系统WebP库为v0.5.0或更高版本时,才会启用对动画WebP文件的支持。您可以在运行时通过调用 features.check("webp_anim") .

当呼叫时 save() 要写入WebP文件,默认情况下将只存储多帧图像的第一帧。如果 save_all 参数存在且为真,则将保存所有帧,并且下列选项也将可用。

append_images

附加为附加帧的图像列表。列表中的每个图像都可以是单帧或多帧图像。

duration

每帧的显示持续时间(毫秒)。为一个常量持续时间传递一个整数,或者传递一个列表或元组来分别设置每个帧的持续时间。

loop

重复动画的次数。默认为[0=无限]。

background

画布的背景色,作为值在(0-255)范围内的rgba元组。

minimize_size

如果为真,则最小化输出大小(慢)。隐式禁用关键帧插入。

kmin, kmax

输出中连续关键帧之间的最小和最大距离。库可以根据需要插入一些关键帧以满足此条件。注意,这些条件应保持:kmax>kmin和kmin>=kmax/2+1。此外,如果kmax<=0,则禁用关键帧插入;如果kmax==1,则所有帧都将是关键帧(kmin值对于这些特殊情况不重要)。

allow_mixed

如果为真,则使用混合压缩模式;编码器试探性地在每帧的有损和无损之间进行选择。

XBM#

Pillow 读取和写入X位图文件(模式 1 )

只读格式#

CUR#

cur用于在Windows上存储光标。cur解码器读取最大的可用光标。不支持动画光标。

DCX#

DCX是由Intel定义的PCX文件的容器文件格式。DCX格式通常用于传真应用程序。DCX解码器可以读取包含 1 , L , P 或 RGB 数据。

打开文件时,只读取第一个图像。你可以使用 seek() 或 ImageSequence 阅读其他图像。

FITS#

在 9.1.0 版本加入.

Pillow识别和读取FITS文件,通常用于天文学。

FLC#

Pillow阅读欧特克FLI和FLC动画。

这个 open() 方法设置以下内容 info 性能:

duration

每帧之间的延迟(毫秒)。

FPX#

Pillow读柯达Flashpix文件。在当前版本中,只从文件中读取最高分辨率的图像,而不考虑查看转换。

备注

要启用完全的FlashPix支持,您需要在构建Python图像库之前构建并安装ijg jpeg库。有关详细信息,请参阅分发自述文件。

FTEX#

在 3.2.0 版本加入.

ftex解码器读取独立战争2:混乱边缘中用于3D对象的纹理。该插件以压缩和未压缩格式读取每个文件的单个纹理。

GBR#

GBR解码器读取gimp brush文件,版本1和2。

打开#

这个 open() 方法设置以下内容 info 性能:

comment

画笔名称。

spacing

画笔之间的间距,以像素为单位。只有2版。

GD#

Pillow 读取未压缩的gd2文件。请注意,您必须使用 PIL.GdImageFile.open() 读取这样的文件。

打开#

这个 open() 方法设置以下内容 info 性能:

transparency

透明度颜色索引。如果图像不透明,则省略此键。

IMT#

Pillow 读取图像工具图像包含 L 数据。

IPTC/NAA#

Pillow为IPTC/NAA新闻照片文件提供有限的读取支持。

MCIDAS#

Pillow识别和读取8位MCIDAS区域文件。

MIC#

枕头识别并读取Microsoft Image Composer(麦克风)文件。打开时,将加载文件中的第一个sprite。你可以使用 seek() 和 tell() 从文件中读取其他精灵。

请注意,MIC文件中可能有2.2的嵌入gamma。

MPO#

枕头识别和读取多图像对象(MPO)文件,首次打开时加载主图像。这个 seek() 和 tell() 方法可用于从文件中读取其他图片。图片索引为零,支持随机访问。

储蓄#

当呼叫时 save() 要写入MPO文件,默认情况下只会保存多帧图像的第一帧。如果 save_all 参数存在且为真,则将保存所有帧,并且以下选项也将可用。

append_images

要作为附加图片追加的图像列表。列表中的每个图像可以是单帧或多帧图像。

在 9.3.0 版本加入.

PCD#

Pillow 读取包含 RGB 数据。这只从文件中读取768x512分辨率图像。更高的分辨率采用专有编码。

PIXAR#

Pillow为Pixar栅格文件提供有限的支持。库可以识别和读取“转储”的RGB文件。

格式代码为 PIXAR .

PSD#

Pillow识别和读取由Adobe Photoshop 2.5和3.0编写的PSD文件。

QOI#

在 9.5.0 版本加入.

Pillow以相当好的图像格式识别和读取图像。

SUN#

Pillow可识别和读取Sun栅格文件。

WAL#

在 1.1.4 版本加入.

Pillow上写着Quake2 Wal纹理文件。

请注意,无法自动识别此文件格式,因此必须在 WalImageFile 用于读取此格式文件的模块。

默认情况下,Quake2标准选项板附加到纹理。若要重写调色板,请使用 PIL.Image.Image.putpalette() 方法。

WMF、EMF#

Pillow可以识别WMF和EMF文件。

在Windows上,它可以读取WMF和EMF文件。默认情况下,它将以72 dpi的速度加载图像。要以其他分辨率加载,请执行以下操作:

from PIL import Image

with Image.open("drawing.wmf") as im:
    im.load(dpi=144)

要添加其他读或写支持,请使用 PIL.WmfImagePlugin.register_handler() 要注册WMF和EMF处理程序,请执行以下操作。**

from PIL import Image
from PIL import WmfImagePlugin


class WmfHandler:
    def open(self, im):
        ...

    def load(self, im):
        ...
        return image

    def save(self, im, fp, filename):
        ...


wmf_handler = WmfHandler()

WmfImagePlugin.register_handler(wmf_handler)

im = Image.open("sample.wmf")

XPM#

Pillow 读取x pixmap文件(模式 P )256色或更少。

打开#

这个 open() 方法设置以下内容 info 性能:

transparency

透明度颜色索引。如果图像不透明,则省略此键。

只写格式#

PALM#

Pillow为Palm PixMap文件提供只写支持。

格式代码为 Palm ,扩展名为 .palm .

PDF#

Pillow可以写入PDF(Acrobat)图像。此类图像以二进制PDF 1.4文件的形式写入。根据图像模式的不同,使用不同的编码方法。

  • 1模式图像使用TIFF编码保存,如果libtiff支持不可用,则使用JPEG编码保存

  • L、RGB和CMYK模式图像使用JPEG码

  • P模式图像使用十六进制编码

  • LA和RGBA模式图像使用JPEG2000编码

储蓄#

这个 save() 方法可以采用以下关键字参数:

save_all

如果使用多帧图像,默认情况下,只保存第一个图像。要将所有帧、每个帧保存到PDF的单独页面,请 save_all 参数必须存在并设置为 True .

在 3.0.0 版本加入.

append_images

一份名单 PIL.Image.Image 要作为附加页追加的对象。列表中的每个图像可以是单帧或多帧图像。这个 save_all 参数必须存在并设置为 True 与 append_images 。

在 4.2.0 版本加入.

append

设置为true可将页面附加到现有的PDF文件。如果文件不存在,则 OSError 将被提升。

在 5.1.0 版本加入.

resolution

DPI中的图像分辨率。这与图像中的像素数一起,将决定将保存在PDF中的页面的物理尺寸。

dpi

一个元组 (x_resolution, y_resolution) ,以英寸为分辨率单位。如果这两个 resolution 参数和 dpi 参数都存在, resolution 将被忽略。

title

文档的标题。如果不附加到现有的PDF文件,则默认为文件名。

在 5.1.0 版本加入.

author

创建文档的人员的名称。

在 5.1.0 版本加入.

subject

文件的主题。

在 5.1.0 版本加入.

keywords

与文档关联的关键字。

在 5.1.0 版本加入.

creator

如果文档是从其他格式转换为PDF格式的,则为创建原始文档的一致性产品的名称。

在 5.1.0 版本加入.

producer

如果文档是从另一种格式转换为PDF格式,则转换为PDF格式的合格产品的名称。

在 5.1.0 版本加入.

creationDate

文档的创建日期。如果不附加到现有的PDF文件,则默认为当前时间。

在 5.3.0 版本加入.

modDate

文件的修改日期。如果不附加到现有的PDF文件,则默认为当前时间。

在 5.3.0 版本加入.

XV缩略图#

Pillow可以读取xv缩略图文件。

仅标识格式#

BUFR#

在 1.1.3 版本加入.

Pillow为bufr文件提供了一个存根驱动程序。

要向应用程序添加读或写支持,请使用 PIL.BufrStubImagePlugin.register_handler() .

GRIB#

在 1.1.5 版本加入.

Pillow为grib文件提供了一个存根驱动程序。

驱动程序要求文件以grib头开始。如果您有嵌入GRib数据的文件,或者有多个GRib字段的文件,那么您的应用程序必须在将文件句柄传递到Pillow之前找到头部。

要向应用程序添加读或写支持,请使用 PIL.GribStubImagePlugin.register_handler() .

HDF5#

在 1.1.5 版本加入.

Pillow为HDF5文件提供了一个存根驱动程序。

要向应用程序添加读或写支持,请使用 PIL.Hdf5StubImagePlugin.register_handler() .

MPEG#

Pillow识别MPEG文件。