【图片操作】生成动态图片

893 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

一、前言

动态图片我们使用的还是比较频繁的,平时的表情包有很多动图。今天我们要做的就是自己制作动态图片,其实就是将视频转换成动图,操作起来非常简单。下面我们就来看看如何实现吧。

二、读取视频

今天我们要做的就是将视频转换成动态图片,首先我们需要读取视频。这里要使用到opencv,其实还可以用moviepy,在处理视频方便要更加专业,不过这里为了方便使用opencv模块。

1、安装

安装的话只需要执行下面的语句:

pip install opencv-python

然后是导入:

import cv2

下面我们就可以使用了。

2、读取视频

opencv读取视频的操作非常简单,代码如下:

import cv2
# 读取视频
capture = cv2.VideoCapture("test.mp4")
# 读取视频帧
ret, frame = capture.read()

这里我们调用cv2.VideoCapture来读取视频,当我们传入0时它会直接调用我们的摄像头。

然后我们调用read读取视频内容,这里返回了两个参数,分别是是否有下一帧和当前帧的图片对象。

3、缩放图片

在转换成动图的时候,我们需要让图片有包浆的感觉,因此要将图片缩小。具体操作如下:

import cv2
img = cv2.imread("1.jpg")
# 修改图片尺寸
reimg = cv2.resize(img, (200, 100))

我们通过调用resize函数修改了图片尺寸。

三、视频转换成GIF

这里就是不断读取视频,然后缩小图片写入GIF。具体代码如下:

import cv2
fps = 12
w, h = 200, 100
capture = cv2.VideoCapture("小新穿内裤.mp4")
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
writer = None
num = 0
while True:
    ret, frame = capture.read()
    if not writer:
        writer = cv2.VideoWriter('result.gif', fourcc, fps, (w, h))
    if not ret:
        break
    if num % 2 == 0:
        writer.write(cv2.resize(frame, (w, h)))
    num += 1
writer.release()

这里我们就是将完整的视频写成了GIF,大家也可以在循环中设置条件让他提前结束,这样就可以控制GIF的时常。