每日总结之python变形动画大作业

所花时间:2小时

代码量:如下

博客量:本学期截至目前63篇

了解到的知识点:对python大作业的完成

题目 38 变形动画

【设计要求】根据给定的两张照片(分别表示变形的首尾照片),编程实现 变形动画,并能以 gif 格式保存。

【界面要求】要求图形界面实现。

代码实现:

from tkinter import Tk
from tkinter.filedialog import askopenfilename
from PIL import Image
import os

创建一个窗口
window = Tk()
window.withdraw()

选择首尾图片
print(“请选择第一张图片:”)
filename1 = askopenfilename()
print(“请选择第二张图片:”)
filename2 = askopenfilename()

打开图片
image1 = Image.open(filename1)
image2 = Image.open(filename2)

获取图片大小和模式
width1, height1 = image1.size
width2, height2 = image2.size
mode = image1.mode

如果两张图片大小不一致,则将它们统一调整为大小相同
if width1 != width2 or height1 != height2:
new_width = max(width1, width2)
new_height = max(height1, height2)
image1 = image1.resize((new_width, new_height))
image2 = image2.resize((new_width, new_height))

创建一个GIF文件对象
gif_filename = “output.gif”
frames = []
duration = 0.1
loop = 0

合成GIF动画
for i in range(10):

根据变形程度获取中间图片
progress = i / 10.0
image3 = Image.blend(image1, image2, progress)

保存中间图片
temp_filename = “temp%d.png” % i
image3.save(temp_filename, “PNG”)

添加到帧序列中
frames.append(Image.open(temp_filename))

保存GIF文件
frames[0].save(gif_filename, format=“GIF”, append_images=frames[1:], save_all=True, duration=duration, loop=loop)

删除临时文件
for i in range(10):
temp_filename = “temp%d.png” % i
os.remove(temp_filename)
print(“GIF文件已保存:”, gif_filename)

  

posted @ 2023-05-14 20:19  南北啊  阅读(86)  评论(0)    收藏  举报
1 2 3
4