美文网首页想法
python制作动图

python制作动图

作者: ElephantKing | 来源:发表于2019-11-11 19:38 被阅读0次

何为GIF

GIF(Graphics Interchange Format)的原义是“图像互换格式”,是CompuServe公司在 1987年开发的图像文件格式。GIF文件的数据,是一种基于LZW算法的连续色调的无损压缩格式。其压缩率一般在50%左右,它不属于任何应用程序。目前几乎所有相关软件都支持它,公共领域有大量的软件在使用GIF图像文件。GIF图像文件的数据是经过压缩的,而且是采用了可变长度等压缩算法。GIF格式的另一个特点是其在一个GIF文件中可以存多幅彩色图像,如果把存于一个文件中的多幅图像数据逐幅读出并显示到屏幕上,就可构成一种最简单的动画。
上面的描述摘自百度,简单来说,GIF就是多张图片在一定时间内,循环显示的文件形式,文件所占空间比较小。

python制作GIF准备工作

  1. python的环境,如何安装python环境可以百度一下。

  2. 安装图片处理库,具体就是按下win+R,后输入cmd,再输入pip install imageio

  3. 为了凑齐3条。

源代码

这部分分两种情况,第一种是,你的原材料是一些图片,假设你的图片是png格式的,如果是jpg的也一样,重要的是,所有图片是同一种格式,且图片的名字是1.png 2.png ...这样的,否则代码如法识别。

import imageio

gif_images = []
for i in range(1, 6):
    #读取图片,保证所有用到的图片在同一目录
    #图片命名为s1.jpg s2.jpg...s5.jpg,如果有更多图片需要把
    #range(1,6)实际上是1-5有效。
    gif_images.append(imageio.imread("s" + str(i)+".jpg"))   # 读取图片
#fps(frame per second)这个参数可以自己修改,所以这个值越大,表示播放越快
imageio.mimsave("result.gif", gif_images, fps = 2)   # 转化为gif动画
效果图

第二种情况是,你的原材料是视频中的某一段,想把其中的几秒钟单独拿出来做成GIF。安装pip install moviepy,以及pip install opencv-python

import numpy as np
import cv2
import imageio

cap = cv2.VideoCapture('3.mp4')
#截取的片段的开始结束时刻,单位秒
start_time,end_time = 30, 40
cap.set(cv2.CAP_PROP_POS_MSEC, start_time*1000)
images= []
while(cap.isOpened()):
    ret, frame = cap.read()
    #gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    result = frame
    frame = cv2.resize(frame,(frame.shape[1] // 2, frame.shape[0] // 2))    
    
    images.append(frame)   # 读取图片
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
    if cap.get(cv2.CAP_PROP_POS_MSEC) >= end_time*1000:
        break

# 转化为gif动画
imageio.mimsave("result.gif",images[::3],fps=cap.get(cv2.CAP_PROP_FPS)//2)   
        
cap.release()
cv2.destroyAllWindows() 

存在的问题

做出来的GIF文件,在网页显示正常,在微信电脑版显示正常,但是在手机微信显示不正常,QQ中也不能动态显示,具体问题还不清楚。

相关文章

网友评论

    本文标题:python制作动图

    本文链接:https://www.haomeiwen.com/subject/imltictx.html