我用 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 的帧的格式,我想我可以相应地保存它们,但我还没弄清楚该怎么做。我怎样才能实现这个目标?
GIF 不是由 JPEG 或 PNG 帧组成 - 它们是由 GIF 帧组成。由于 GIF 可以而且经常包含透明度,因此您最好将帧存储为 PNG,因为 JPEG 无法存储透明度。