Pillow GIF格式

2021-07-09 14:37 更新

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)]


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号