使用 Pillow 提取 GIF 帧时检测并保留原始格式

问题描述 投票:0回答:1

我用 Pillow 分离并保存 GIF 的帧,方法如下:

from PIL import Image

def split_and_save_frames(gif_path):
    with Image.open(gif_path) as img:
        frame_count = img.n_frames
        
        for frame_index in range(frame_count):
            img.seek(frame_index)
            frame = img.copy()
            frame.save(f"frame-{frame_index+1}.jpg", "JPEG")

例如,我可以将每个帧保存为 .png 文件,如下所示:

frame.save(f"frame-{frame_index+1}.png", "PNG")
,我可以将每一帧保存为 .jpg 文件,如下所示:
frame.save(f"frame-{frame_index+1}.jpg", "JPEG")
。但是,如您所知,帧可以由 .png 或 .jpg 组成,如果我将由 .jpg 帧组成的 GIF 保存为 .png,我可能无法获得最佳结果(文件大小太大或太低,可能会出现图像丢失等)。这就是为什么我不知道将 GIF 转换为帧时是否保存为 .png 还是 .jpg。如果我能了解组成 GIF 的帧的格式,我想我可以相应地保存它们,但我还没弄清楚该怎么做。我怎样才能实现这个目标?

python python-imaging-library
1个回答
0
投票

GIF 不是由 JPEG 或 PNG 帧组成 - 它们是由 GIF 帧组成。由于 GIF 可以而且经常包含透明度,因此您最好将帧存储为 PNG,因为 JPEG 无法存储透明度。

© www.soinside.com 2019 - 2024. All rights reserved.