Python3,为了无损压缩gif动图,我不得不写了一个压缩神器,真香。

2023-11-19

1、引言

小屌丝:鱼哥, 求助~ 求助~ 求助~
小鱼:你这是告诉我,重要的事情 说三遍吗?
小屌丝:你可以这么理解。
小鱼:好吧… 什么事情,这么慌慌张张。
小屌丝:我的动图太大了, 无法上传到 C站。
小鱼:呦呵… 你也开始写博文了?
小屌丝:向鱼哥看齐。
小鱼:没毛病。话说回来, C站可以上传单张5MB的图片,这都满足不了你?
小屌丝:别提了, 为了能上传这个图片,我可没少想办法。
小鱼:你直接在某网站,进行压缩就可以啊。
小屌丝:不行,需要注册会员,而且,还需要收费的。
小鱼:你还差钱?
小屌丝:哎呦,你不都说白嫖最香吗?
小鱼:… 我… 我可 没说。
小屌丝:你说了… 明明就说了。
小鱼:你还想压缩gif动图吗?
小屌丝:… 想啊
小鱼:那我说过这句话吗?
小屌丝::… 没… 没…有…吧~
小鱼:这还差不多, 那你把图片给我, 我来整。
小屌丝:可行。

我们来看下,小屌丝提供的原图片的大小,10MB

在这里插入图片描述

我们再来看一下,C站的上传图片限制:

因为C站的限制,单张最大上传文件为5MB
在这里插入图片描述

想象一下,如果C站不限制图片上传的大小,那是不是… C站得每隔一段时间就得扩容一次。

  • 主要是担心运维同学,天天在公司加班,身心疲惫啊~ ~。
    在这里插入图片描述

所以,为了照顾运维同学的身体,我们就来压缩自己的图片大小吧。

2、代码实战

2.1 模块介绍

因为是要生成gif动图,所以,必不可少的模块:ImageIo

  • 如果你不了解ImageIo,那你可以借着这个机会来了解它;
  • 如果你了解ImageIo,那你可以借着这个机会来加深印象;

小屌丝:这合着, 不管会不会,都要重新学习一次呗。
小鱼:知识就是在复习与学习之间,才能完全掌握的。
小屌丝:服。。

1、ImageIo定义:

引言官网的解释:ImageIo提供了一系列示例图像,可以使用类似于URI的方式来使用。

换句话说,即:ImageIo是一个处理图像的接口

2、ImageIo组成部分

ImageIo分为三部分,如下:

  • Plugin:面向后端的适配器

    • 用于响应来自 它可以将来自 iio.core 的请求转换为 满足请求的后端指令(例如,读/写/迭代);
  • Backend Library:可以读取和/或写入的库 图像或类似图像的对象(/视频);

    • 它可以据需要进行安装;
  • ImageResource:包含图像数据的数据 blob;

    • 通常是由ImageIo读取驱动器。

看到这, 是不是对ImageIo有了初步的了解。
接下来, 我们就去体会ImageIo的强大功能喽。

2.2 安装

由于ImageIo是第三方库,所以,在使用前,要安装。
老规矩,我们直接pip方式安装,即:

pip install imageio

然后就是等待着安装。

pip的安装方式很多,你可以,直接看这两篇:

2.3 代码示例

代码示例

# -*- coding:utf-8 -*-
# @Time   : 2023-02-15
# @Author : Carl_DJ


'''
实现功能
    使用ImageIo 和PIL库,对gif动图进行压缩处理
'''

import imageio
from PIL import Image, ImageSequence

# 设置压缩尺寸,这里设置压缩尺寸为500
rp = 500

img_list = []

# 读取原gif动图
img = Image.open("./data/param-demo.gif")

# 对原动图进行压缩,并存入img_list 
for i in ImageSequence.Iterator(img):
    i = i.convert('RGB')
    if max(i.size[0], i.size[1]) > rp:
        i.thumbnail((rp, rp))
    img_list.append(i)

# 计算帧的频率
durt = (img.info)['duration'] / 1000

# 读取img_list合成新的gif
imageio.mimsave('param-out.gif', img_list, duration=durt )

运行结果

在这里插入图片描述
你看, 这压缩完成后, 就是2.7MB,这缩小的不是一点点。
接着,我展示下压缩后的动图,看看是不是无损展示。
在这里插入图片描述

小鱼:你看, 是不是非常完美。
小屌丝:唉, 鱼哥,你这动图,怎么似曾相似啊
小鱼:这说明,你又仔细的看我的博文了,这就《Python3,2分钟掌握Doscoart库,你也能成为艺术大师。》 这篇啊。
小屌丝:我去~~~ 我说的嘛。

3、总结

看到这里, 今天的分享就差不多结束了。
同样,回顾下今天的内容,其实很简单的。
介绍了什么是ImageIo,已经ImageIo的组成部分,和代码实战。

所以, 是不是觉得, 跟着小鱼学习新知识,根本就没有那么费劲呢。

我是小鱼

  • CSDN 博客专家
  • 阿里云 专家博主
  • 51CTO 博客专家
  • 51认证讲师
  • 金牌面试官&面试培训师

关注,带你学习更多更有趣的Python知识。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python3,为了无损压缩gif动图,我不得不写了一个压缩神器,真香。 的相关文章

随机推荐

  • solr下载安装及简单应用

    一1 Solr环境安装 1 安装Jdk1 8 solr6 6是 1 8编译的 Tomcat8 Solr6 6 各软件 2 下载 下载 solr 6 6 版本 http www apache org dyn closer lua lucene
  • Eclipse逆向工程插件ModelSpoon,由代码生成UML类图和时序图

    使用ModelGoon 下载地址链接 https pan baidu com s 1xV4TwYC5JcCHPJsQr0VUcQ 密码 uf3a 安装到Eclipse 点击Eclipse的Help gt Install New Softwa
  • 7.19 数据结构顺序表的增删改查

    1 完成顺序表的按值进行修改函数 调用listSearchValue seqList S datatype e 按值查找函数先判断值是否存在 不存在返回的 2则该函数返回 1 打印顺序表中没有要修改的元素 如果返回的不为 2 则遍历顺序表依
  • USB device和USB host

    USB 英文全称 Universal Serial Bus 即通用串行总线 常常各种USB芯片同时具有host和device两种接口 host就是主的 可以起控制作用 device slave 就是从 是被控制的 比如PC机的USB口 可以
  • fastcgi的环境变量

    FCGI ROLE RESPONDER SCRIPT FILENAME scripts 5 cgi QUERY STRING aaa 11111111111111 bbb 2222222222222222 ccc 3333333333333
  • Spring3.0纯注解开发-越是高端越简洁

    附 类也称为接口 接口的范围很广泛 注解开发和纯注解开发不同点 1 纯注解新增加注解 configuration springcongfig类表名配置类 component xx springcongfig类 扫包注解 Scope sing
  • 一个基于golang开发的博客系统--如何部署goblog

    GoBlog是一个基于GoLang Mysql Redis相关技术实现的简单个人博客 GoBlog在GinCMS的基础上开发了前端展示界面 下载地址 https sn9 us file 20193518 406730634 https sn
  • 【IDEA】Idea 中使用Lombok找不到其自动生成的方法 字符串超长 javac eclipse编译

    1 概述 今天要做测试 然后我拷贝了一个超长的字符串 然后运行的时候报错字符串超长 java常量字符串 允许的最大长度仅为65534 归根结底是javac的问题 本身和idea没关系 但也不是 点关系没有 按照此路径打开 办法如下 File
  • wikioi 2147 bitset+map解决

    题目描述 Description 小明是一名天文爱好者 他喜欢晚上看星星 这天 他从淘宝上买下来了一个高级望远镜 他十分开心 于是他晚上去操场上看星星 不同的星星发出不同的光 他的望远镜可以计算出观测到的星星发出的光的数值W 小明当然想尽可
  • 国外有python专业的大学_有哪些国外大学非常容易申请?

    我来说几个门槛相对来说很低的学校吧 请注意 这里说的是相对他们的QS排名相当的其他学校 这所学校好进一些 1 天堂模式 澳洲八大除墨尔本 澳大利亚国立大学作为和香港大学 东京大学 加州伯克利 洛桑联邦理工学院排名相当的大学 录取门槛甚至远不
  • 系统内核升级回滚

    查看当前版本 root test app 45 92 uname r 3 10 0 1160 15 2 el7 x86 64 环境的不同 可能查下的内核会有所不同 操作步骤 本案例主要以4 4 234 1 el7 elrepo x86 64
  • LLaMA开源语言模型泄漏版下载

    Meta Facebook 开源语言模型LLaMA泄漏版国内网盘下载 该语言模型据说是比openAI的ChatGPT能力更强的 虽说是开源语言模型 但如果想要直接使用 还是需要通过Edu教育邮箱来申请资格的 得到批复邮件之后 可以做为科学研
  • pandas 数据导出为csv Excel格式

    import pandas as pd string to show exporting data to csv df to csv filepath or buffer path to story to sep column separa
  • 月薪1000到游戏创业赚百万,程序员到自媒体达人,他是怎么做到的?

    深圳雷哥 一位8年游戏开发经验的程序员游戏创业赚了百万从程序员转战自媒体写作与职场教练目前副业每月收入高达4K全网粉丝2 万 预计年底破5万下面来听听雷哥的传奇故事 希望对大家有所启发和帮助 01 我的学生时代 我叫雷巍 今年32岁 来自湖
  • 一位毕业生的自我分享

    活动地址 毕业季 进击的技术er 1 毕业后的去向 继续读研还是直接就业 我的大学是一个普通二本 学的是物联网工程专业 二本院校大家也都知道 是考研的主力军 我的很多同学从大二开始就决定考研了 而我从大二就决定毕业直接就业 他们考研的原因也
  • ESP32cam系列教程001:使用webcam摄像头实时查看视频

    文章目录 1 ESP32cam 介绍 2 arduino IDE 2 1 安装 arduino IDE 2 2 arduino IDE 获取 ESP32 开发环境 3 内网视频实时查看 3 1 选择 文件 gt 示例 gt ESP32 gt
  • LeetCode每日刷题:多数元素

    题目 给定一个大小为 n 的数组 找到其中的多数元素 多数元素是指在数组中出现次数 大于 n 2 的元素 你可以假设数组是非空的 并且给定的数组总是存在多数元素 解题思路 通过Hashmap的方法来解答 通过Hashmap来统计每个元素的个
  • HbuilderX运行uni-app开发的微信小程序

    HbuilderX运行uni app开发的微信小程序 Hbuilder下载地址 https www dcloud io hbuilderx html 当咱们创建了个uni app项目后 将整个项目用HbuilderX打开 记住一定是项目的根
  • BLE Mesh中广播包类型Mesh Beacon、Mesh Message、PB-ADV,以及代理的PB-GATT

    在BLE Mesh中常用于数据通信的几种方式 Mesh Beacon Mesh Message PB ADV PB GATT 前三种是广播类型 最后一种是基于代理走BLE连接的一种数据通信 广播包种类 广播包类型 Mesh Beacon 0
  • Python3,为了无损压缩gif动图,我不得不写了一个压缩神器,真香。

    gif动图无损压缩 1 引言 2 代码实战 2 1 模块介绍 2 2 安装 2 3 代码示例 3 总结 1 引言 小屌丝 鱼哥 求助 求助 求助 小鱼 你这是告诉我 重要的事情 说三遍吗 小屌丝 你可以这么理解 小鱼 好吧 什么事情 这么慌