Python—自己动手设计一个GIF

许久,没更新一下自己帖子的开头结尾模板了,看久了总会觉得缺了点什么,于是上周就做了两个gif(上面那只猫的图片,三角形+“蓝字”就是哦,还不赶快关注),效果不是很满意,完整的代码嘛就不全部贴出来了,简单讲解一下。另外接下里2个月左右准备考职称,可能真要断更2个月,许久没考试脑力值挺缺的如果大家有什么好玩的事情,随时可以找我私聊。

就简单说说gif的思路吧,如果有玩过美图gif之类的app,就知道做一个gif很简单,连拍几张照片,然后按顺序选中,然后输出即可。那如果是自己动手做呢,无非就是自己做几张图片,然后按顺序合成。

那关键的两步1.作一张张的图片。2.按顺序合并成gif要怎么做呢?

我就做了这么个二维码,然后小飞机绕行,没有涉及复杂的东西。第一步,就是把小飞机贴到二维码上面,比如从左下角开始,按照飞行曲线的许多个坐标,进行粘贴小飞机制图。做一张图比较简单,使用PIL模块中的Image方法,实现代码及思路如下:

im = Image.open('%s\%s.png'% (path_file,1))

im.thumbnail((800,600))

im.save('%s\%s.png'% (path_file,1))

im1 = Image.open('plane.png')

im1.thumbnail((50,50))

im1 = im1.rotate(90)

im.paste(im1, (x, y),mask=im1)

im.save('%s\%s.png'% (path_file2, i))

也就是打开二维码图片、设置图片大小,然后打开小飞机并设置图片大小、旋转角度、粘贴坐标,然后一张图就做好了。

辣么,飞机的飞行曲线函数,要怎么表达,我就有点懵逼,想半天没想到牛逼的方法,就用最通俗的分段函数硬杠了出来(4条线段+4个点)

然后就是把这一张张的图片,按顺序合成一个gif,代码如下:

#!/usr/bin/python3.6

# -*- coding: utf-8 -*-

# __author__: Ed Frey

# date:2018/9/5

importimageio,os

defcreate_gif(image_list, gif_name):

frames = []

forimage_nameinimage_list:

frames.append(imageio.imread(image_name))

# Save them as frames into a gif

imageio.mimsave(gif_name, frames,'GIF',duration=0.1)

return

image_list = []

path_file='file_02'

files = os.listdir(path_file)

files.sort(key=lambdax:int(x[:-4]))

foriinfiles:

png ='%s\%s'%(path_file,i)

ifos.path.isfile(png):

image_list.append(png)

create_gif(image_list,'picture.gif')

旋转角度、粘贴坐标,然后一张图就做好了。

本期就更新到这里,另外,剧透一下最近在玩的内容,就是开发通过个人号发送微信消息、QQ消息的功能(其实本想做企业微信的发送消息,苦于没个人号相关的模块功能,官方的接口是要用企业管理员的权限及相关参数,这谁肯给我呢),目前wechat、qq发消息的核心代码都已完成,而且已经配置基础信息测试了……

一晃可能真要到12月或者1月才能有时间更新出来。我计划要写的比ATM更精致一些,作为今年的收官之作,敬请期待

再贴一遍我刚出炉的GIF小飞机,转啊转

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180915G0RTIQ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券