不花一分钱做个在线的gif合成服务

举报
香菜聊游戏 发表于 2022/06/26 21:43:54 2022/06/26
【摘要】 因为写文章我经常会需要做一些GIF。但是网上的各种GIF服务不太好,所以我想着是不是要自己可以做一个。所以我做了这样一个服务。那么我来讲一下,我今天我到底是怎么做的?一 业务需求。首先第一步我要去实现合成GIF这个功能。然后我们要实现多文件上传。再然后进行GIF的合成。最后保存到本地。然后返回给前端一个下载链接。最后就是服务部署到云服务器上。二 技术要求。Python (3.6),Flask...

因为写文章我经常会需要做一些GIF。但是网上的各种GIF服务不太好,

所以我想着是不是要自己可以做一个。所以我做了这样一个服务。

那么我来讲一下,我今天我到底是怎么做的?

一 业务需求。

首先第一步我要去实现合成GIF这个功能。

然后我们要实现多文件上传。

再然后进行GIF的合成。

最后保存到本地。然后返回给前端一个下载链接。

最后就是服务部署到云服务器上。

二 技术要求。

Python (3.6),Flask,Image

Python的安装就不赘述了,使用下面的语句安装第三方包,或者直接的pycharm中安装,总之安装上就行

pip install flask

pip install Image

三 技术实现

看一下项目结构

image.png

先看代码再进行分析

import os
import uuid
 
from PIL import Image
from flask import Flask, render_template, request, send_from_directory
 
frame = 10
sleepTime = 1.0 / frame
app = Flask(__name__)
BASE_PATH = os.path.dirname(os.path.abspath(__file__)) +"/download"
def makeGif(imgList,uid):
   im = imgList[0]
   file_name = BASE_PATH +"/"+uid +".gif"
   im.save(file_name, save_all=True, append_images=imgList[1:], loop=0, duration=sleepTime)
 
@app.route('/')
def hello_world():
    return render_template('upload.html')
 
@app.route('/gif',methods=['POST'])
def save_file():
    uploaded_files = request.files.getlist("photo")
    uid = str(uuid.uuid4())
    imgList = []
    for file in uploaded_files:  # 这里改动以存储多份文件
        img = Image.open(file)
        imgList.append(img)
    makeGif(imgList,uid)
    download_url = "/download/"+uid+".gif"
    return render_template("download.html",download_url = download_url)
 
@app.route("/download/<filename>", methods=["GET"])
def download_file(filename):
    return send_from_directory(BASE_PATH, filename, as_attachment=True)
 
if __name__ == '__main__':
    app.run()

技术点:

1.uid的使用

作为一个网站,有可能会同时有很多人使用所以我这里使用了uid作为唯一的标识。

2.Image的使用

Image主要是用来合成GIF的主要功能,图片的变换时间duration是控制每一张图片的展示时间,你可以自己设置。

3.Flask的使用

之前没有使用过flask。所以对网页的一些渲染不是很明白,但是也很简单。作为一个占位符然后传递参数。

完整代码下载地址:自己做个在线的gif合成服务,soeasy-Python文档类资源-CSDN下载

四、服务部署

第一步 随便选个服务商买个云服务器

第二步,部署环境 安装Python,创建Python环境,这一步也是常规操作,根据你自己的操作系统安装环境。

安装第三方包,使用上面同样的命令。

第三步,启动服务器 使用下面的命令

python main.py &

将服务放在后台,要不然你关了控制台服务就关了。

第四步 开始访问 输入到浏览器 http://ip:port/,ip就是公网ip,port 就是你刚刚打开的那个对外的端口

替换你本地的ip和端口,将会出现下面的画面,选择文件后,点击创建GIF。

注意:要多选几张图片,要不然gif怎么动

点击返回的界面,就会出现下载链接。点击下载就可以了,就会得到下面的图片

五、可以优化的点

1、异常检查

比如合成,保存异常,增加异常的处理使程序更健壮。

2、定期文件的清理

当前合成的gif是没有进行清理的,在服务器上会一直存储,所以要做一个自动清理的计划任务,防止硬盘给撑爆。

3、对HTML的页面进行优化。

现在的界面太丑了,可以对界面进行一些美化,让用户看起来更舒服,这个我有点无能为力😂

4、更改部署的方式

现在是使用的flask默认的服务器。不建议在线上使用。流量高的时候会出现不稳定现象。可以替换成生产模式下的部署方案,不过现在自己玩玩也够了,毕竟也不是服务全人类。

5、可以对合成的一些参数进行开放

现在的合成是写死的参数,可以将参数打开由用户控制,比如每个图片变幻的时间,生成的图片循环效果等等,这样更灵活。

6、图片的格式化

现在图片的大小是没有进行格式化的,后面可以根据需求把图片进行统一大小,然后进行合成。

六,总结

这次主要是做一个GIF的功能。

使用了Python的image库。

然后还要使用了flask的web功能。

很简单,都是基础功能的组装。

总之:你可以更好的。



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。