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

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

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

一 业务需求。

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

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

再然后进行GIF的合成。

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

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

二 技术要求。

Python (3.6),Flask,Image

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

pip install flask
pip install Image

三 技术实现

看一下项目结构

先看代码再进行分析

import os
import uuidfrom PIL import Image
from flask import Flask, render_template, request, send_from_directoryframe = 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下载

四、服务部署

在aws选了一个免费的服务器。可以免费使用十二个月的时间。这时间。。。不就是让我白嫖吗

传送地址:aws服务器免费地址

Amazon Elastic Compute Cloud(Amazon EC2 云服务器)是一种 Web 云服务,能在云中提供安全且可调整大小的计算能力,说人话就是一台放在远程的机器,配置可以根据需求调整。官方说还支持mac系统,这还真是独一份,哈哈,不过我用不到。

第一步, 搞个服务器

亚马逊云科技提供了100余种产品免费套餐。其中,计算资源Amazon EC2首年12个月免费,750小时/月;存储资源 Amazon S3 首年12个月免费,5GB标准存储容量。

https://aws.amazon.com/cn/free/?nc2=h_ql_pr_ft&all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Types=*all&awsf.Free%20Tier%20Categories=*all&trk=e0213267-9c8c-4534-bf9b-ecb1c06e4ac6&sc_channel=el

和本地不同,在云服务器,需要先增加一步云服务器实例的创建,可以理解为买一台机器,装上操作系统。

1、选择配置

EC2系统提供以下的虚拟机实例类型

  • 微型实例:默认配置了613MB的存储器,一个虚拟核心上运行两个ECU单位,免费试用一年;
  • 小型实例:默认配置了1.7 GB的存储器,一个虚拟核心上运行一个ECU单位;
  • 大型实例:默认配置了7.5GB的存储器,两个虚拟核心上各运行两个ECU单位;
  • 极大实例:默认配置了15GB的存储器,四个虚拟核心上各运行两个ECU单位;

根据自己的需求,选择一个配置就行,不过反正我是选择免费的,谁能拒绝不花钱白嫖呐。

2、选择地区

最好选择离自己最近的节点创建实例,因为越近的话网络就越好,响应速度也越快。这里我选择香港的节点。

3、选择操作系统

根据自己的习惯选择,大家都知道常规的服务器都是linux,这里我也选择了一个Ubuntu,如果你喜欢windows,也没有问题。

重要的配置都已经搞定了,下面的就不一一截图了,总之就是选择服务器配置,搞个操作系统,买完之后就像下面这样。

第二步,部署环境

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

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

第三步,启动服务器

使用下面的命令

python main.py &

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

第四步,开启端口,开启ip

使用云服务器和本地开发的不同就是这一步

因为我们本地的端口是没有限制的,但是在云服务器上如果开启过多的端口无异于裸奔,所以云服务器的端口一般需要手动开启,

同时因为公网ip的稀缺性,所以在创建对外服务的时候一般都要申请分配一个公网ip,这一步跟着手册完成即可,

打开安全组,在列表钩选一个安全组,选择编辑入站规则,添加规则增加8888端口即可:

Security Group其实定义的是防火墙相关的端口开关,这个在后面会用到。

第五步 开始访问

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

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

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

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

五、可以优化的点

1、异常检查

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

2、定期文件的清理

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

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

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

不花一分钱做个在线的gif合成服务相关推荐

  1. 计算机硬件在线修复,电脑故障在线查询,自己也能修电脑不花一分钱!

    我们的电脑在日常生活中偶尔会出现一些故障,比如死机.蓝屏.黑屏等.对于一些不太懂电脑的小伙伴来说遇到问题,可能需要去维修店进行维修,花费一些费用和时间.今天"瘪豌豆"要给大家介绍一 ...

  2. 不花一分钱让手机支持原声原唱

    原声原唱是目前新手机的一大卖点,我的三星X199没有这个功能,但通过刷机,我让它拥有了这些功能,真是爽呆了,不花一分钱耶. 买手机之后不久就有了数据线,但一直只是通过它传一些20K以下的铃声.50K以 ...

  3. 【周末学习】五格货栈的互联网思维:如何不花一分钱实现...

    互联网时代的来临,让饥饿营销.粉丝经济成为焦点.看不懂也学不来?这就对了.因为这仅仅只是"术"的层面. 5月5日晚上8点,在黑马会旅游分会微信微信群中,五格货栈创始人潘定国结合自己 ...

  4. 如何不花一分钱在百度科技园过三天

    说实话,程序猿大哥是我们一直想研究的一种生物. 赚得多,花的少. 大多数时间,我们部门的程序猿大哥们连TB都不是那么热情,表示只要放假让他们在家打打游戏就好. 双十一买三百块的优衣库,感觉一年的衣服都 ...

  5. 不花一分钱开12家美容院,一年赚3000万,背后商业模式引发深思!

    李姐在深圳经营美容行业多年,同时兼任深圳美业协会的会长,因为属于技术出身,对营销不是很擅长,导致企业经营多年,发展并不是很理想,但是李姐的技术过硬,配套设施.服务都做得非常好. 这两年,因为竞争加剧, ...

  6. 小米不花一分钱把用户做到10000万的秘密

    摘要:小米的名字最早很奇葩,比如红星.千奇.安童.玄德.灵犀等.比如灵犀,想取 "心有灵犀" 的意头,甚至在纸上画过犀牛吉祥物的草图.差点定的一个名字是 "红星" ...

  7. C#做的在线升级小程序

    转自原文C#做的在线升级小程序 日前收到一个小任务,要做一个通用的在线升级程序.更新的内容包括一些dll或exe或.配置文件.升级的大致流程是这样的,从服务器获取一个更新的配置文件,经过核对后如有新的 ...

  8. 分区界限必须调整为高于最后一个分区界限_不花一分钱,为SSD硬盘腾空间

    现如今,越来越多笔记本配有SSD硬盘,但搭载的SSD硬盘容量都比较小,主流机型一般为256G甚至512GB,而几年前的老机型或只配了64GB或32GB.而动辄数几GB的大型游戏.4K视频,让笔记本的存 ...

  9. linux 移动硬盘 优化,不花一分钱,给移动硬盘加速

    最近很多小伙伴向小编抱怨移动硬盘速度太慢,其实只要一个小技巧,就能让移动硬盘加速,而且不用花一分钱哦. 首先,右键点击要加速的移动硬盘图标,选择"属性",在打开页面中选择" ...

最新文章

  1. Activity如何后台运行?不是缓存,是运行。
  2. 究竟是什么在影响着我?
  3. 谷粒商城高级篇资料_一文搞定剑指offer面试题【分文别类篇】
  4. 地铁看java书女生_地铁上背单词的女孩
  5. JAVA学习-JAVA实现1-100的累加
  6. 前端职业规划 - 前端技术专家们的生死书
  7. 做VB的,经常注册和反注册OCX控件和DLL链
  8. vue.js高德地图实现热点图
  9. Android编译32/64位so or bin(Android.bp or Android.mk)
  10. Gambit 4.运行时选项
  11. 在乌班图系统上安装yum
  12. 【七日阅书】1.注重实效《程序员修炼之道—从小工到专家》
  13. mybatis-plus使用和原理剖析之逻辑删除
  14. 你理解的精益可能是错的!——从源头重新解读精益
  15. 山重水复疑无路_最快下降问梯度(深度学习入门系列之七)
  16. php 获取京东商品详情,用正则表达式,抓取京东的商品列表
  17. nabc模型_团队开发-极速蜗牛-NABC模型
  18. MySQL培训-梅科尔
  19. IPv6专题系列:01. IPv6地址介绍
  20. 判断Android Textview是否换行

热门文章

  1. 浏览器提示https证书有风险该怎么解决
  2. 还有波音737飞机在飞行吗
  3. c语言程序设计刘会超答案,C语言程序设计案例教程
  4. 各种文件对应的文件类型
  5. Java项目:房屋租赁管理系统(java+SSM+Layui+Maven+Mysql+Jsp
  6. 聚合支付”为什么很多游戏商家选择他
  7. JavaScript:实现加密哈希SHA-1 算法(附完整源码)
  8. 2020年中国高粱行业发展现状分析,产品多元化发展「图」
  9. java io导出excel表格_Java IO 导入导出Excel表格
  10. 北京大学计算机学院复试名单2020,学院2020年全日制硕士研究生招生考试复试名单公示...