• Python 利用PIL由多张图片合成gif动画


    • Python 由多张图片合成gif动画


    • 案例
    1. import os
    2. figure_save_path = "file_fig_test"
    3. import warnings
    4. warnings.filterwarnings("error")
    5. import numpy as np
    6. np.random.seed(0)
    7. import matplotlib.pyplot as plt
    8. from PIL import Image
    9. import time
    10. num = 100
    11. gif_frames = []
    12. open_time = []
    13. save_time = []
    14. plot_time = []
    15. for i in range(num):
    16. #图形绘制
    17. start_time = time.time()
    18. plt.scatter(np.random.random(), np.random.random())
    19. end_time = time.time()
    20. plot_time.append(end_time-start_time)
    21. #创建图形保存文件夹
    22. if not os.path.exists(figure_save_path):
    23. os.makedirs(figure_save_path)
    24. else:
    25. pass
    26. #保存图形
    27. start_time = time.time()
    28. plt.savefig(os.path.join(figure_save_path, str(i) + ".jpg"))
    29. end_time = time.time()
    30. save_time.append(end_time-start_time)
    31. #打开图形
    32. start_time = time.time()
    33. img = Image.open(os.path.join(figure_save_path, str(i) + ".jpg"))
    34. end_time = time.time()
    35. open_time.append(end_time-start_time)
    36. gif_frames.append(img)
    37. print("动画绘制开始")
    38. start_time = time.time()
    39. gif_frames[0].save("test.gif",
    40. save_all=True, append_images=gif_frames[1:], duration=200, loop=0)
    41. end_time = time.time()
    42. print("动画绘制完成,用时:", round(end_time-start_time, 6))
    43. print("平均动画绘制完成,用时:", round((end_time-start_time)/num, 6))
    44. print("平均图形绘制用时:", round(sum(plot_time)/len(plot_time), 6))
    45. print("平均图形保存用时:", round(sum(save_time)/len(save_time), 6))
    46. print("平均图形打开用时:", round(sum(open_time)/len(open_time), 6))
    • 动画生成结果就不放了

    • 让我们看看什么操作最耗时
    1. 动画绘制开始
    2. 动画绘制完成,用时: 3.61503
    3. 平均动画绘制完成,用时: 0.03615
    4. 平均图形绘制用时: 0.004437
    5. 平均图形保存用时: 0.146415
    6. 平均图形打开用时: 0.000287

    • 这是保存图形用时随图像数量的变化 
      • 考虑到绘制点数的增长,这是合理的


    •  这是图形打开用时
      • 变换不大,这是合理的


    • 这是每次scatter的用时
      • 看上去也比较合理


    • 那我们再看看随着图片数量的增长,绘制动画的用时变化
    1. gif_time = []
    2. for i in range(20, 100):
    3. new_frames = gif_frames[:i]
    4. start_time = time.time()
    5. new_frames[0].save(str(i)+".gif",
    6. save_all=True, append_images=gif_frames[1:], duration=200, loop=0)
    7. end_time = time.time()
    8. gif_time.append(end_time-start_time)
    9. print("finished:", str(i))

    • 这就比较迷
      • 不过问题不大

  • 相关阅读:
    爬虫随笔
    若依VUE 从一个页面跳转另一个页面并携带参数
    回文串 rust解法
    stack和queue
    mac上好用的10款软件
    ZZNUOJ_用C语言编写程序实现1359:数独(附完整源码)
    温敏AIE双亲多肽分子/AIE磁性荧光微球/多重刺激响应性聚合物纳米微球相关制备
    苹果签名有多少种类之TF签名(TestFlight签名)是什么?优势是什么?什么场合需要应用到?
    【原创】一切不谈考核的管理都是扯淡!
    初步了解华为的MTL(市场到线索)流程的基本概念和来龙去脉
  • 原文地址:https://blog.csdn.net/Chandler_river/article/details/134481591