简介
在一个文件夹中有一系列PNG图片(以序号+“#”的形式命名),本文介绍如何使用python将图片依次连起来,形成GIF动图
代码
from PIL import Image
import os
def create_gif_from_folder(folder_path, output_gif, frame_duration=100, max_size=1000):
"""
将文件夹中的所有 .png 图片组合成一张适合微信查看的 GIF 动态图
:param folder_path: 包含 .png 图片的文件夹路径
:param output_gif: 输出的 GIF 文件路径
:param frame_duration: 每帧的持续时间(毫秒)
:param max_size: 图片的最大宽度或高度(像素),用于控制分辨率
"""
# 获取文件夹中所有的 .png 文件,并按文件名排序
png_files = sorted([f for f in os.listdir(folder_path) if f.endswith('.png')],
key=lambda x: int(x.split('#')[0]))
# 打开所有图片并存储在列表中
images = []
for png_file in png_files:
img_path = os.path.join(folder_path, png_file)
img = Image.open(img_path)
# 调整图片大小,确保不超过最大尺寸
if max(img.width, img.height) > max_size:
img.thumbnail((max_size, max_size), Image.Resampling.LANCZOS)
# 将图片转换为调色板模式(P 模式),并使用高质量的量化方法
img = img.convert("P", palette=Image.Palette.ADAPTIVE, colors=256, dither=Image.Dither.FLOYDSTEINBERG)
images.append(img)
# 保存为适合微信查看的 GIF
images[0].save(
output_gif,
save_all=True,
append_images=images[1:],
duration=frame_duration,
loop=0,
compress_level=0, # 禁用压缩
disposal=2, # 每帧独立播放
optimize=True, # 启用优化
transparency=0 # 保留透明度(如果有)
)
print(f"GIF 已成功保存到 {output_gif}")
用法
# 示例用法
folder_path = "Share/G478/Model/DEAD/Eikonal/200-270" # 替换为你的文件夹路径
output_gif = f"{folder_path}/output.gif" # 输出的 GIF 文件名
frame_duration = 200 # 每帧的持续时间(毫秒)
create_gif_from_folder(folder_path, output_gif, frame_duration)