图像文件格式#
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位游程编码的支持。
打开#
- 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
打开#
- 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 to4:4:4
1
: equivalent to4:2:2
2
: equivalent to4: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。
备注
这个 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。
打开#
- 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动画。
- duration
每帧之间的延迟(毫秒)。
FPX#
Pillow读柯达Flashpix文件。在当前版本中,只从文件中读取最高分辨率的图像,而不考虑查看转换。
备注
要启用完全的FlashPix支持,您需要在构建Python图像库之前构建并安装ijg jpeg库。有关详细信息,请参阅分发自述文件。
FTEX#
在 3.2.0 版本加入.
ftex解码器读取独立战争2:混乱边缘中用于3D对象的纹理。该插件以压缩和未压缩格式读取每个文件的单个纹理。
GBR#
GBR解码器读取gimp brush文件,版本1和2。
打开#
- comment
画笔名称。
- spacing
画笔之间的间距,以像素为单位。只有2版。
GD#
Pillow 读取未压缩的gd2文件。请注意,您必须使用 PIL.GdImageFile.open()
读取这样的文件。
打开#
- 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色或更少。
打开#
- 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文件。