python制作gif动画_Python 和MATLAB 制作Gif 图像

主要内容概述:预备知识

MATLAB 代码实现GIF

使用imageio 生成GIF

使用animation 交互式方式生成GIF

总结

0,预备知识

首先了解下什么是GIF 图片,以及常用的图片格式。

GIF的全称是Graphics Interchange Format,可译为图形交换格式,用于以超文本标志语言(Hypertext Markup Language)方式显示索引彩色图像,在因特网和其他在线服务系统上得到广泛应用。GIF是一种位图。位图的大致原理是:图片由许多的象素组成,每一个象素都被指定了一种颜色,这些象素综合起来就构成了图片。

一图胜千言,GIF 动图更是图片中的战斗机!

下面我们就分别从Python 和MATLAB 介绍Git 动图的制作方法。

一,在MATLAB 中实现GIF动图制作

效果:下面是一个制作矩形函数和其频谱的动图。

Note:主要的思想就是画出第一张图,然后在追加第二张,第三张图,并设置其延时时间

主要函数介绍:

1 Getframe 函数

F = getframe(h) gets a frame from the figure or axes identified by handle h.

获取句柄定义的图片或是坐标的一帧。

如果想获得图片的一帧使用的语法为。

F = getframe(gcf);

2 frame2im

Return image data associated with movie frame

帧图画转换为图像数据

3 rgb2ind

Convert RGB image to indexed image

将RGB 图片转换为索引图片

4 imwrite

Imwrite (A, filename,fmt) writes the image A to the file specified by filename in the format specified by fmt.

5 完整代码如下:

clc; clear all; close all;

N=10000; % sampling numbers

Tau0=1; % define initial Tau

pic_num = 1;

for i=1:100

Tau=Tau0/i;

TimeRange=linspace(-10*Tau,10*Tau,N); % display time range

FreqRange=linspace(-200*pi/i,200*pi/i,N); % display frequency range

Half_Tau=Tau/2; % -0.5 Tao ==> 0.5 Tao

RECT=1/Tau*double(abs(TimeRange)

SINC=sinc(FreqRange*Tau*pi); % sinc pulse, Xtra

subplot(2,1,1);

plot(TimeRange,RECT,'LineWidth',1.5); grid on;

xlim([-1 1]); ylim([-0.5 120]);

xlabel('Time'); ylabel('Amplitude');

subplot(2,1,2);

plot(FreqRange,SINC,'LineWidth',1.5); grid on;

xlim([-200*pi/i 200*pi/i]); ylim([-0.5 1.5]);

xlabel('Frequency'); ylabel('Amplitude');

drawnow;

F=getframe(gcf);

I=frame2im(F);

[I,map]=rgb2ind(I,256);

if pic_num == 1

imwrite(I,map,'impulse.gif','gif', 'Loopcount',inf,'DelayTime',0.1);

else

imwrite(I,map,'impulse.gif','gif','WriteMode','append','DelayTime',0.1);

end

pic_num = pic_num + 1;

end

二,Python 中GIF动图的绘制

1,使用imageio 生成GIF 动态图像

IMAIO是一个Python库,它提供了一个简单的接口来读取和写入大量的图像数据,包括动画图像、体积数据和科学格式。它是跨平台的,运行在Python 2 .x和3.x上,并且易于安装。

imageio.imread() #从指定的文件读取图像。返回一个NUMPY数组,该数组带有元数据的元属性。注意,图像数据按原样返回,并且可能不总是具有uTI8的dType。

def createGif():

images = []

filenames=sorted((fn for fn in os.listdir('image\\') if fn.endswith('.png')))

# 分解顺序和合成顺序不一致,造成Gig 混乱

n = len(filenames)

for i in range (0,n):

filename =str(i)+'.png'

if (filename in filenames):

images.append(imageio.imread('image\\'+filename))

imageio.mimsave('gif.gif', images,duration=0.1)

def main():

processImage('impulse.gif')

createGif()

if __name__=='__main__':

main()

2,使用animation 交互式方式

介绍:使用animation function 来动态的显示一个sin函数。

import numpy as np

import matplotlib.pyplot as plt

import matplotlib.animation as animation

x = np.linspace(0, 10, 100) # 生成测试数据

y = np.sin(x)

fig, ax = plt.subplots()

line= ax.plot(x, y, color='k')

def update(num, x, y, line): #num表示迭代次数

line.set_data(x[:num], y[:num])

line.axes.axis([0, 10, -1.2, 1.2])

return line,

FuncAnimation函数生成动画。参数说明:

#fig 进行动画绘制的figure 的句柄

#func 自定义动画函数,即传入刚定义的函数animate

#frames 动画长度,一次循环包含的帧数

#fargs 除帧数之外的其他需要调用的参数

#init_func 自定义开始帧。

#interval 更新频率,以ms计

#blit 选择更新所有点,还是仅更新产生变化的点。应选择True,但mac用户请选择False,否则无法显示动画

# 调用FuncAnimation 生成GIF 动画

ani = animation.FuncAnimation(fig, update, len(x), fargs=[x, y, line],

interval=25, blit=True,repeat= True)

ani.save('test.gif') # 保存成GIF动态图格式

plt.show()

总结:

本文主要讲述了GIF 图片格式及用MATLAB 和Python的实现方式。

其中Python实现介绍了两种方式:1用现有的图片生成。2使用animation函数实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值