python对gif图压缩的完美解决方案
作者:Rambo.Fan 发布时间:2021-06-19 03:09:00
标签:python,gif图,压缩
1. 背景:
最近写了一篇CSDN博客需要上传gif图,发现大小超过了5M,无法上传。
文件大小:
本想自己找个免费的压缩工具,结果下载下来的工具不是钓鱼工具就是流氓软件,还有的在线压缩工具说是免费,等你download的时候说是要付费,总之一大堆坑。
2.寻找解决办法
由于上面坑爹的经过,于是我自己试着找找python压缩gif的办法。
2.1可行性分析
根据我的理解是可行的,因为gif的文件是根据一帧帧静态图片根据时序拼接起来的,如果使用python将gif文件分解成一帧帧静态图片的话,再将静态图片对象进行压缩之后再合并,理论上是可以减小文件大小。
3.问题分解
3.1将gif文件分解
需要找到一个可以将gif文件分解成静态图像的库,了解到PIL的ImageSequence可以将gif分解成一帧帧。
3.1.1示例代码
from PIL import Image, ImageSequence
filename = "2018-0.gif"
gif = Image.open(filename)
index = 0
for frame in ImageSequence.Iterator(gif):
#frame.convert('RGB')
frame.save(str(index)+'.png')#pass
index += 1
3.1.2 效果图
4.代码优化
代码很简单
import imageio
from PIL import Image, ImageSequence
def compressGif(filename):
gif = Image.open(filename)
if not gif.is_animated:
return False
imageio.mimsave('compress-'+filename, [frame.convert('RGB') for frame in ImageSequence.Iterator(gif)], duration = gif.info['duration']/2000)
fileList = ["2018-0.gif","2018-1.gif","2018-2.gif","2018-3.gif","2018-4.gif"]
for filename in fileList:
compressGif(filename)
5.做成一个通用工具
5.1创建一个虚拟环境
mkvirtualenv GIF
5.2虚拟环境安装必要库
pip install imageio
pip install pyinstaller
打包必备的库
5.3打包
pyinstaller -F compress.py
5.4把.gif文件放到compress.exe文件夹下
5.5双击.exe查看打包效果
5.6压缩后的图片效果
可以看到压缩之后图片依然很清晰
压缩率: 5356/1504 = 3.56
这个压缩率已经非常高了
来源:https://blog.csdn.net/qq_37608398/article/details/120943977
0
投稿
猜你喜欢
- 首先讲一讲提示框(Tooltip) 的使用方法样式文件: LESS版本:对应源文件 tooltips.less<style id=&q
- 一、理论知识准备1.确定假设函数 如:y=2x+7 其中,(x,y)是一组数据,设共有m个2.误差cost 用平方误差代价函数 3.减小误差
- 让我们来看一些例子:--获取表的count信息select count(*) from T with(nolock)--获取特定值的coun
- 引言“深入认识Python内建类型”这部分的内容会从源码角度为大家介绍Python中各种常用的内建类
- 环境搭建准备工具:pyton3.5,selenium,phantomjs我的电脑里面已经装好了python3.5安装Seleniumpip3
- asp连接sql server代码如下:dim connset conn = Serve
- 我在使用conda安装虚拟环境的过程中,下载一些包,比如torch等,发现在虚拟环境中有一份以外,pkgs文件夹下同样也会出现一份,大小一样
- 题目描述724. 寻找数组的中心下标 - 力扣(LeetCode) (leetcode-cn.com)给你一个整数数组 nums
- 文件结构html_downloader.py - 下载网页html内容#!/usr/bin/python# -*- coding: UTF-
- APScheduler是一个Python定时任务框架,使用起来十分方便。提供了基于日期、固定时间间隔以及crontab类型的任务,并且可以持
- 我的主要思路是:Excel -> Html -> Image代码如下:# -*- coding:utf-8 -*-__autho
- 介绍:今天在使用django的时候忽然想用到,如何匹配多个关键字的操作,我们知道django有一个objects.filter()方法,我们
- 前言Python 读取数据自动写入 MySQL 数据库,这个需求在工作中是非常普遍的,主要涉及到 python 操作数据库,读写更新等,数据
- 1、mysql 导出文件:SELECT `pe2e_user_to_company`.company_name, `pe2e_user_to
- 引言with 语句是从 Python 2.5 开始引入的一种与异常处理相关的功能(2.5 版本中要通过 from __future__ im
- python解析网页,无出BeautifulSoup左右,此是序言安装BeautifulSoup4以后的安装需要用eazy_install,
- 语法格式:row_number() over(partition by 分组列 order by 排序列 desc)row_num
- 本文实例讲述了Flask-Mail用法。分享给大家供大家参考,具体如下:很多类型的应用程序都需要在特定事件发生时提醒用户,而常用的通信方法是
- 前言删除表,大家下意识想到的命令可能是直接使用DROP TABLE "表名",这是初生牛犊的做法,因为当要删除的表达空间
- 在 PHP 中表示空的map或空数组都是以空数组形式,在转化为json数据时,会将空数组统一 json 序列化成 [],这样就存在