图像文件格式#

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文件,其中包含 1LP ,或 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驱动程序可以在 LLABRGBCMYK 模式,但ghostscript可以将图像转换为 RGB 模式,而不是将它们保留在原始颜色空间中。EPS驱动程序可以写入图像 LRGBCMYK 模式。

装载量#

如果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 帧被转换为 RGBRGBA 模式下,有一个可用的设置::

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 模式图像仅转换为 RGBRGBA 在第一帧之后::

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

打开#

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

background

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

transparency

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

version

版本(或 GIF87aGIF89a

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 读取包含 LRGBCMYK 数据。它编写标准和渐进的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:44:2:24: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 可以是以下几种值之一:

  • 用于命名预设的字符串,例如 keepweb_lowweb_high

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

在 2.5.0 版本加入.

comment

关于图像的评论。

在 9.4.0 版本加入.

备注

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

JPEG 2000#

在 2.4.0 版本加入.

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

加载时,如果设置 mode 在图像上 load() 方法,您可以要求 Pillow 将图像转换为 RGBRGBA 而不是自己选择。也可以设置 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,并且 irreversibleTrue 则将应用不可逆颜色转换,否则编码将使用可逆颜色转换。MCT最适合与 modeRGB 并且仅当图像数据具有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 读取和写入包含 1LPRGB 数据。

PNG#

Pillow 识别、读取和写入包含 1LLAIPRGBRGBA 数据。从v1.1.7开始支持交错文件。

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

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

打开#

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

chromaticity

色度点,作为浮点数的8元组。( White Point XWhite Point YRed XRed YGreen XGreen YBlue XBlue Y

gamma

gamma,作为浮点数给出。

srgb

sRGB呈现意图为整数。

  • 0感性

  • 1相对比色法

  • 2饱和度

  • 3绝对比色法

transparency

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

为了 1LIRGB 图像,表示此图像中完全透明像素的颜色。

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

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

储蓄#

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

optimize

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

transparency

为了 P1LIRGB 图像,此选项控制图像中要标记为透明的颜色。

为了 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 财产将是 Truen_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合成。

备注

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

PPM#

Pillow读写包含以下内容的PBM、PGM、PPM和PNM文件 1LIRGB 数据。

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

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

SGI#

Pillow 读写未压缩 LRGBRGBA 文件夹。

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 读写包含 LLAPRGBRGBA 数据。 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

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

在 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解码器可以读取包含 1LPRGB 数据。

打开文件时,只读取第一个图像。你可以使用 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 参数必须存在并设置为 Trueappend_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文件。