欢迎访问 生活随笔!

尊龙游戏旗舰厅官网

当前位置: 尊龙游戏旗舰厅官网 > 编程语言 > >内容正文

python

python实现gif动画(matplotlib、imageio、pillow)) -尊龙游戏旗舰厅官网

发布时间:2025/1/21 32 豆豆
尊龙游戏旗舰厅官网 收集整理的这篇文章主要介绍了 python实现gif动画(matplotlib、imageio、pillow)) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

点击上方“ai搞事情”关注尊龙游戏旗舰厅官网


gif(graphics interchange format,图形交换格式)是一种位图图像格式。

gif格式的图像文件具有如下特点:

  • gif格式图像文件的扩展名是“.gif”。

  • 对于灰度图像表现最佳。

  • 具有gif87a和gif89a两个版本。

  • 采用改进的lzw压缩算法处理图像数据。

  • 调色板数据有通用调色板和局部调色板之分,有不同的颜色取值。

  • 不支持24bit彩色模式,最多存储256色。

  • 1. matplotlib

    matplotlib 中的 animation 模块绘制动态图,绘制心形动态函数

    • 安装matplotlib

    pip install matplotlib import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation fig, ax = plt.subplots() # fig.patch.set_alpha(0.) # 设置透明背景,但animation不起作用 plt.axis('off') # 关闭坐标轴 #初始化窗口和坐标轴 xdata, ydata = [], [] #初始化x,y列表 ln, = ax.plot([], [], 'r-', animated=false) #初始化绘制曲线的参数。 #init()函数初始化x,y轴范围 def init():ax.set_xlim(-20,20)ax.set_ylim(-20,15)return ln, #迭代器,根据传入的frame更新x,y值 def update(frame):# 心形函数x = 16 * np.sin(frame) ** 3y = 13 * np.cos(frame) - 5 * np.cos(2 * frame) - 2 * np.cos(3 * frame) - np.cos(4 * frame)xdata.append(x)ydata.append(y)ln.set_data(xdata, ydata)return ln, # interval:帧持续时间(milliseconds) anim = animation.funcanimation(fig, update, frames=np.linspace(0, 10, 100), init_func=init, interval=1, repeat=false, blit=true) anim.save('tmp.gif', writer='pillow') plt.show()

    动态图无法绘制透明背景。

    2. imageio

    pip install imageio

    https://blog.csdn.net/guduruyu/article/details/77540445

    # -*- coding: utf-8 -*- import imageio def create_gif(image_list, gif_name):frames = []for image_name in image_list:frames.append(imageio.imread(image_name))# save them as frames into a gifimageio.mimsave(gif_name, frames, 'gif', duration=0.01) # duration:秒returndef main():png_path = 'images'png_files = os.listdir(png_path)image_list =[png_path "/d.png" % frame_id for frame_id in range(len(png_files))]gif_name = 'created_gif.gif'create_gif(image_list, gif_name)if __name__ == '__main__':main()

    imageio库有个弊端是好像不能将透明背景的png图像生成透明背景的gif图像

    3. pillow

    pip install pillow

    github:https://github.com/python-pillow/pillow

    官方文档:

    https://pillow.readthedocs.io/en/latest/handbook/image-file-formats.html#gif

    参数说明

    pillow可以通过设置transparency参数,使gif背景为透明的。

    import os import random from pil import image, imagedraw, imagesequence def gif2pngs(gif_path, png_path):"""gif图像拆成若干png帧图"""img = image.open(gif_path)for ind, frame in enumerate(imagesequence.all_frames(img)):# 保存每一帧图像frame.save(os.path.join(png_path, "d.png" % ind)) def pngs2gif(png_path, gif_name):"""png帧图生成gif图像"""frames = []png_files = os.listdir(png_path)for frame_id in range(len(png_files)):frame = image.open(os.path.join(png_path, "d.png" % frame_id))frames.append(frame)# frames.reverse() # 将图像序列逆转frames[0].save(gif_name, save_all=true, append_images=frames[1:], loop=0, disposal=2) def draw_gif(gif_name):"""通过pil绘制动态图"""size = 50i = 0colors = ['red', 'blue', 'green', 'gray']# 绘制随机闪现的球frames = []while i < 100:img = image.new("rgba", (800, 800), color=(0, 0, 0))draw = imagedraw.draw(img)x = random.randint(-800, 800)y = random.randint(-800, 800)if x-size < 0 or x-size > img.size[0]:continueif y-size < 0 or y-size > img.size[1]:continuedraw.ellipse((x, y, x size, y size), fill=colors[random.randint(0, 3)])frames.append(img)i = 1# transparency 透明背景设置,duration单位 毫秒, loop=0无限循环 loop=1循环一次,不设置,不循环frames[0].save(gif_name, save_all=true, append_images=frames[1:], transparency=0, duration=100, loop=0, disposal=2) if __name__ == '__main__':gif2pngs('下班了.gif', 'images')pngs2gif('images', 'tmp.gif')draw_gif('ball.gif') 图片

    gif2pngs('下班了.gif', 'images')函数执行后会在images保存帧图像

    图片图片

    长按二维码关注尊龙游戏旗舰厅官网

    有趣的灵魂在等你

    与50位技术专家面对面20年技术见证,附赠技术全景图

    总结

    以上是尊龙游戏旗舰厅官网为你收集整理的python实现gif动画(matplotlib、imageio、pillow))的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得尊龙游戏旗舰厅官网网站内容还不错,欢迎将尊龙游戏旗舰厅官网推荐给好友。

    网站地图