Pillow GIF格式
Pillow可以读取GIF87A和GIF89A版本的GIF文件格式。除非使用了gif89a功能或gif89a已经在使用,否则库默认情况下会在gif87a中写入游程编码的文件。
请注意,GIF 文件始终作为灰度 ( L
) 或调色板模式 ( P
) 图像读取。
这个 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、TIFF和WebP都支持此功能。
它还支持ICNS和ICO。如果图像以相关大小传入,则将使用它们,而不是缩小主图像。 -
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表示它将永远循环。默认情况下,图像不会循环。 -
comment
关于图像的评论。
读取本地图像
GIF 加载器创建与 GIF 文件的逻辑屏幕大小相同大小的图像内存,并将实际像素数据(本地图像)粘贴到该图像中。如果您只想要实际的像素矩形,则可以 在加载文件之前操作 size
和tile
属性:
im = Image.open(...)
if im.tile[0][0] == "gif":
# only read the first "local image" from this GIF file
tag, (x0, y0, x1, y1), offset, extra = im.tile[0]
im.size = (x1 - x0, y1 - y0)
im.tile = [(tag, (0, 0) + im.size, offset, extra)]
更多建议: