
背景说明:
本周三就是督导复验,汇报PPT还在优化中……

原来PPT一页插入多张图片,我都是用美图的GIF做


存在问题:

1、每次都要打开链接,全选所有图片,才能导入
2、导入后的照片背景大小,默认为全部导入照片中最高、最宽的图片尺寸,导致一些小一点的照片会出现难看的白边。
3、切换时间最多2秒,而做PPT,一般最少也要3秒一张图
4、图片尺寸最大2000像素(再大就模糊了)
5、保存后输入文件名称。选择路径保存

6、需要转移GIF图片时,必须关闭美图软件,才能调用GIF图片

之前我一直觉得美图GIF比人工做切换动画方便多了,但是可选参数太少。
不过因为制作次数不多,都是用美图GIF做了。它已经提高了不少效率。
实际需求:
这次督导汇报又是大量的照片,为了能够最大化呈现照片效果,就需要合并GIF。

这次我想问问deepseek,是否可以用Python快速做JPG图片的GIF动画效果。
第1种效果:每张图片切换3秒

结果是可行的。所以我把照片默认为3秒,快速做出了GIF图片
(以蝴蝶为例)
'''
汇报PPT,把JPG图片合并为动态GIF,间隔时间可设置
deepseek,阿夏
20250512
'''
from PIL import Image
import os
m = int(input('间隔几秒
'))
def create_gif_from_images(folder_path, output_gif, target_size=(1024, 720)):
"""
将文件夹中的所有图片合并为GIF
参数:
folder_path: 包含图片的文件夹路径
output_gif: 输出的GIF文件名
target_size: 目标图片大小 (宽, 高)
"""
# 获取文件夹中所有图片文件(不含GIF图片)
image_files = []
for file in os.listdir(folder_path):
if file.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.jifi')):
image_files.append(os.path.join(folder_path, file))
if not image_files:
print("文件夹中没有找到图片文件!")
return
print(f"找到 {len(image_files)} 张图片")
# 打开所有图片并调整大小
images = []
for i, image_file in enumerate(image_files):
try:
img = Image.open(image_file)
# 直接拉伸到目标尺寸(不保持比例)
img = img.resize(target_size, Image.LANCZOS)
images.append(img)
except Exception as e:
print(f"无法处理文件 {image_file}: {e}")
if not images:
print("没有有效的图片可以处理!")
return
# 设置每帧的持续时间(毫秒)
durations = [m * 1000] * len(images) # 所有帧相同时间
# 保存为GIF
images[0].save(
output_gif,
save_all=True,
append_images=images[1:],
duration=durations,
loop=0, # 无限循环
quality=100, # 高质量
optimize=True # 优化GIF
)
print(f"GIF已成功保存为 {output_gif}")
# 使用示例
if __name__ == "__main__":
path = r'C:Usersjg2yXRZOneDrive桌面'
names = input('请输入文件夹名称: ')
# 蝴蝶
input_folder = os.path.join(path, names) # 包含图片的文件夹
output_file = os.path.join(input_folder, f"{names}.gif") # 输出的GIF文件名
# 确保输出文件夹存在
os.makedirs(input_folder, exist_ok=True)
create_gif_from_images(input_folder, output_file)



都是3秒一张

第2种效果:第一张6秒,后面照片都是3秒
第一稿完成后,园长提出一个要求:一个GIF里面第一张照片慢一点(6秒),其他照片保持原速3秒。
哇,那一刻我觉得:时也命也,命运注定我一定要用Python来做图片GIF!!!
请AI工具再满足我这个愿望

结果图片只是被放在一张白色1024*720的白色背景上,所以有大量的白边

只写了两次就成功了

微调参数
'''
汇报PPT,把JPG图片合并为动态GIF ,第一张6秒,后面都是3秒
deepseek,阿夏
20250512
'''
from PIL import Image
import os
m1=int(input('第一张几秒
'))
m2=int(input('第2-X张几秒
'))
def create_gif_from_images(folder_path, output_gif, target_size=(1024, 720)):
"""
将文件夹中的所有图片合并为GIF
参数:
folder_path: 包含图片的文件夹路径
output_gif: 输出的GIF文件名
target_size: 目标图片大小 (宽, 高)
"""
# 获取文件夹中所有图片文件
image_files = []
for file in os.listdir(folder_path):
if file.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.jfif')):
image_files.append(os.path.join(folder_path, file))
if not image_files:
print("文件夹中没有找到图片文件!")
return
print(f"找到 {len(image_files)} 张图片")
# 打开所有图片并调整大小
images = []
for i, image_file in enumerate(image_files):
try:
img = Image.open(image_file)
# 直接拉伸到目标尺寸
img = img.resize(target_size, Image.LANCZOS)
images.append(img)
except Exception as e:
print(f"无法处理文件 {image_file}: {e}")
if not images:
print("没有有效的图片可以处理!")
return
# 设置每帧的持续时间(毫秒)
durations = [m1*1000] # 第一帧6秒3
durations.extend([m2*1000] * (len(images) - 1)) # 其余帧3秒
# 保存为GIF
images[0].save(
output_gif,
save_all=True,
append_images=images[1:],
duration=durations,
loop=0, # 无限循环
quality=100 # 高质量
)
print(f"GIF已成功保存为 {output_gif}")
# 使用示例
if __name__ == "__main__":
path = r'C:Usersjg2yXRZOneDrive桌面'
names = input('请输入文件夹名称: ')
# 蝴蝶
input_folder = os.path.join(path, names) # 包含图片的文件夹
output_file = os.path.join(input_folder, f"{names}.gif") # 输出的GIF文件名
# 确保输出文件夹存在
os.makedirs(input_folder, exist_ok=True)
create_gif_from_images(input_folder, output_file)
终端输入

可以数一数,第一张是不是6秒?第2-6张是不是都是3秒。

Python制作GIF动画,比“美图秀秀的GIF动画”更快速,图片也能够统一,秒数可以自定义(每张都可以设置不同的切换描述)。
第3种效果:每张0.1秒(蝴蝶逐帧飞舞动画)
下面我把彩色蝴蝶都设置为0.1秒(秒数m要用float),做个蝴蝶飞的效果
'''
汇报PPT,把JPG图片合并为动态GIF,间隔时间可设置
deepseek,阿夏
20250512
'''
from PIL import Image
import os
m = float((input('间隔几秒
')))
def create_gif_from_images(folder_path, output_gif, target_size=(1024, 720)):
"""
将文件夹中的所有图片合并为GIF
参数:
folder_path: 包含图片的文件夹路径
output_gif: 输出的GIF文件名
target_size: 目标图片大小 (宽, 高)
"""
# 获取文件夹中所有图片文件(不含GIF图片)
image_files = []
for file in os.listdir(folder_path):
if file.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.jifi')):
image_files.append(os.path.join(folder_path, file))
if not image_files:
print("文件夹中没有找到图片文件!")
return
print(f"找到 {len(image_files)} 张图片")
# 打开所有图片并调整大小
images = []
for i, image_file in enumerate(image_files):
try:
img = Image.open(image_file)
# 直接拉伸到目标尺寸(不保持比例)
img = img.resize(target_size, Image.LANCZOS)
images.append(img)
except Exception as e:
print(f"无法处理文件 {image_file}: {e}")
if not images:
print("没有有效的图片可以处理!")
return
# 设置每帧的持续时间(毫秒)
durations = [m * 1000] * len(images) # 所有帧相同时间
# 保存为GIF
images[0].save(
output_gif,
save_all=True,
append_images=images[1:],
duration=durations,
loop=0, # 无限循环
quality=100, # 高质量
optimize=True # 优化GIF
)
print(f"GIF已成功保存为 {output_gif}")
# 使用示例
if __name__ == "__main__":
path = r'C:Usersjg2yXRZOneDrive桌面'
# path=r'D:20250502彩色蝴蝶'
names = input('请输入文件夹名称: ')
# 蝴蝶
input_folder = os.path.join(path, names) # 包含图片的文件夹
output_file = os.path.join(input_folder, f"{names}.gif") # 输出的GIF文件名
# 确保输出文件夹存在
os.makedirs(input_folder, exist_ok=True)
create_gif_from_images(input_folder, output_file)

为了凑GIF在5MB以内,只能显示着11张图


第4种效果:等差序列递增(1,2,3,4,5……秒,每张增加1秒)
再写一个蝴蝶逐步延长时间的代码,比如第一张1秒,第2张2秒,第三张3秒……

'''
汇报PPT,把JPG图片合并为动态GIF,每张图片显示时间递增
第1张1秒,第2张2秒,第3张3秒...
deepseek,阿夏
20250512
'''
from PIL import Image
import os
m=int(input('初始秒数,然后递增1秒
'))
def create_gif_from_images(folder_path, output_gif, target_size=(1024, 720)):
"""
将文件夹中的所有图片合并为GIF
参数:
folder_path: 包含图片的文件夹路径
output_gif: 输出的GIF文件名
target_size: 目标图片大小 (宽, 高)
"""
# 获取文件夹中所有图片文件
image_files = []
for file in os.listdir(folder_path):
if file.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.jfif')):
image_files.append(os.path.join(folder_path, file))
if not image_files:
print("文件夹中没有找到图片文件!")
return
print(f"找到 {len(image_files)} 张图片")
# 打开所有图片并调整大小
images = []
for i, image_file in enumerate(image_files):
try:
img = Image.open(image_file)
# 直接拉伸到目标尺寸
img = img.resize(target_size, Image.LANCZOS)
images.append(img)
except Exception as e:
print(f"无法处理文件 {image_file}: {e}")
if not images:
print("没有有效的图片可以处理!")
return
# 设置每帧的持续时间(毫秒) - 递增时间
durations = [(i+m)*1000 for i in range(len(images))] # 第1张1秒,第2张2秒...
# 保存为GIF
images[0].save(
output_gif,
save_all=True,
append_images=images[1:],
duration=durations,
loop=0, # 无限循环
quality=100, # 高质量
optimize=True # 优化GIF
)
print(f"GIF已成功保存为 {output_gif}")
# 使用示例
if __name__ == "__main__":
path = r'C:Usersjg2yXRZOneDrive桌面'
names = input('请输入文件夹名称: ')
input_folder = os.path.join(path, names) # 包含图片的文件夹
output_file = os.path.join(input_folder, f"{names}.gif") # 输出的GIF文件名
# 确保输出文件夹存在
os.makedirs(input_folder, exist_ok=True)
create_gif_from_images(input_folder, output_file)

从1秒、2秒、3秒,逐渐递增秒数

第5种效果:每张图都指定秒数

代码写出来来了,显示需要手动输入图片的一串秒数的列表

我还是改成列表吧

数一数,每张的切换秒数与设置的列表数值一致

'''
汇报PPT,把JPG图片合并为动态GIF,每张图片设置指定时间,列表设置指定时间
deepseek,阿夏
20250512
'''
from PIL import Image
import os
import ast
def create_gif_from_images(folder_path, output_gif, durations, target_size=(1024, 720)):
"""
将文件夹中的所有图片合并为GIF
参数:
folder_path: 包含图片的文件夹路径
output_gif: 输出的GIF文件名
durations: 每张图片的显示时间列表(秒)
target_size: 目标图片大小 (宽, 高)
"""
# 获取文件夹中所有图片文件
image_files = []
for file in sorted(os.listdir(folder_path)):
if file.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.jfif')):
image_files.append(os.path.join(folder_path, file))
if not image_files:
print("文件夹中没有找到图片文件!")
return
print(f"找到 {len(image_files)} 张图片")
# 检查时间列表长度是否匹配
if len(durations) != len(image_files):
print(f"注意:时间列表有{len(durations)}个值,图片有{len(image_files)}张")
print("将循环使用时间设置")
# 打开所有图片并调整大小
images = []
for i, image_file in enumerate(image_files):
try:
with Image.open(image_file) as img:
# 保持宽高比调整大小
img.thumbnail(target_size, Image.LANCZOS)
# 创建新图像确保统一尺寸
new_img = Image.new("RGB", target_size, (255, 255, 255))
new_img.paste(img, ((target_size[0]-img.width)//2,
(target_size[1]-img.height)//2))
images.append(new_img)
except Exception as e:
print(f"无法处理文件 {os.path.basename(image_file)}: {e}")
if not images:
print("没有有效的图片可以处理!")
return
# 转换秒数为毫秒,并循环使用时间列表
durations_ms = [int(d*1000) for d in durations]
final_durations = [durations_ms[i % len(durations_ms)] for i in range(len(images))]
# 保存为GIF
try:
images[0].save(
output_gif,
save_all=True,
append_images=images[1:],
duration=final_durations,
loop=0, # 无限循环
quality=95,
optimize=True,
disposal=2 # 恢复背景色
)
print(f"GIF已成功保存为 {output_gif}")
print(f"文件大小: {os.path.getsize(output_gif)/1024:.1f} KB")
except Exception as e:
print(f"保存GIF时出错: {e}")
def get_valid_durations(prompt, default=None):
"""获取有效的时间列表输入"""
while True:
try:
if default:
print(f"默认时间设置为: {default}")
use_default = 'y'
# input("是否使用默认设置? (y/n): ").lower()
if use_default == 'y':
return default
time_input = input(prompt)
if not time_input:
raise ValueError("输入不能为空")
# 尝试解析输入
if time_input.startswith('[') and time_input.endswith(']'):
durations = ast.literal_eval(time_input)
else:
durations = [float(x.strip()) for x in time_input.split(',')]
if not all(d > 0 for d in durations):
raise ValueError("所有时间值必须大于0")
return durations
except Exception as e:
print(f"输入无效: {e}
请重新输入,例如: 1,2,3 或 [1,2,3]")
if __name__ == "__main__":
# 设置默认路径和参数
default_path = os.path.expanduser(r'C:Usersjg2yXRZOneDrive桌面')
default_durations = [1, 2, 1, 3, 2, 4, 1, 3, 2, 4, 1, 2, 4, 3, 2, 1]
print("=== JPG转GIF工具 ===")
print(f"当前桌面路径: {default_path}")
# 获取文件夹名称
folder_name = input('请输入包含图片的文件夹名称:
').strip()
if not folder_name:
print("必须提供文件夹名称!")
exit(1)
# 获取时间设置
durations = get_valid_durations(
'请输入每张图片的显示时间(秒),用逗号分隔(例如:1,2,3):
',
default_durations
)
# 设置路径
input_folder = os.path.join(default_path, folder_name)
output_file = os.path.join(input_folder, f"{folder_name}.gif")
# 检查文件夹是否存在
if not os.path.exists(input_folder):
print(f"错误: 文件夹 '{input_folder}' 不存在!")
exit(1)
# 创建GIF
create_gif_from_images(input_folder, output_file, durations)
感谢
万能的AI工具(星火讯飞、文心一言、豆包、智普请言、deepseek)破解了困扰我很久的PPT中GIF动画制作问题——提高了质量(可以设置图片大小、自定义秒数)、也提升了速度(几秒生成GIF)禁得起反复修改。
用AI工具做办公程序开发,效率太高了!
© 版权声明
文章版权归作者所有,未经允许请勿转载。如内容涉嫌侵权,请在本页底部进入<联系我们>进行举报投诉!
THE END















暂无评论内容