何为GIF
GIF(Graphics Interchange Format)的原义是“图像互换格式”,是CompuServe公司在 1987年开发的图像文件格式。GIF文件的数据,是一种基于LZW算法的连续色调的无损压缩格式。其压缩率一般在50%左右,它不属于任何应用程序。目前几乎所有相关软件都支持它,公共领域有大量的软件在使用GIF图像文件。GIF图像文件的数据是经过压缩的,而且是采用了可变长度等压缩算法。GIF格式的另一个特点是其在一个GIF文件中可以存多幅彩色图像,如果把存于一个文件中的多幅图像数据逐幅读出并显示到屏幕上,就可构成一种最简单的动画。
上面的描述摘自百度,简单来说,GIF就是多张图片在一定时间内,循环显示的文件形式,文件所占空间比较小。
python制作GIF准备工作
-
python的环境,如何安装python环境可以百度一下。
-
安装图片处理库,具体就是按下win+R,后输入cmd,再输入pip install imageio
-
为了凑齐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中也不能动态显示,具体问题还不清楚。











网友评论