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

news2025/7/30 9:59:40

gif动图无损压缩

  • 1、引言
  • 2、代码实战
    • 2.1 模块介绍
    • 2.2 安装
    • 2.3 代码示例
  • 3、总结

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的安装方式很多,你可以,直接看这两篇:

  • Python3,选择Python自动安装第三方库,从此跟pip说拜拜!!
  • Python3:我低调的只用一行代码,就导入Python所有库!

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知识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/367838.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

程序员35岁以后就没有出路了吗?听听京东10年测开的分析

国内的互联网行业发展较快,所以造成了技术研发类员工工作强度比较大,同时技术的快速更新又需要员工不断的学习新的技术。因此淘汰率也比较高,超过35岁的基层研发类员工,往往因为家庭原因、身体原因,比较难以跟得上工作…

RocketMQ 延迟队列

什么是延迟队列指消息发送到某个队列后,在指定多长时间之后才能被消费。应用场景RocketMQ 延迟队列定时消息(延迟队列)是指消息发送到broker后,不会立即被消费,等待特定时间投递给真正的topic。broker有配置项messageD…

自学黑客2年都没入门,从零入门渗透有那么难吗?附入门教程。

最近年底了,不少朋友都是在总结一年的学习成果。最后不少人发现完成情况与自己最初定下的目标相去甚远。 我认识不少人自学大半年了:b站,网盘,各种各样的资源数不胜数,总之只要是跟安全相关的不管学不学,先…

IP地址,子网掩码,网段 概念详解

文章目录1. 子网掩码1.1 子网掩码的概念及作用1.2 子网掩码的组成1.3 子网掩码的表示方法1.4 为什么要使用子网掩码?1.5 子网掩码的分类2. 子网掩码和IP地址的关系2.1 根据掩码确定网段IP地址是以 网络号和 主机号来标示网络上的主机的,我们把网络号相同…

「JVM 编译优化」Graal 编译器

文章目录1. 历史背景2. 构建编译调试环境3. JVMCI 编译器接口4. 代码中间表示5. 代码优化与生成1. 历史背景 Graal 编译器在 JDK 9 以 Jaotc 提前编译工具的形式首次加入到官方的 JDK 中,JDK 10 开始提供替换(得益于 HotSpot 编译器接口,Jav…

vue中的key值

1. 什么是key? 当我们对一个数据进行遍历生成DOM时,vue的内部会根据索引号对其进行key的定义,而key会作为每一个新生成DOM的唯一标识。 2.为什么不建议索引值作为key? 很多人喜欢直接使用索引值作为key,当所遍历的数…

项目缓存问题处理

1、public/index.html文件头部配置 <meta http-equiv"pragram" content"no-cache"> <meta http-equiv"cache-control" content"no-cache,no-store,must-revalidate"> <meta http-equiv"expires" content&…

Video 标签无法播放 mp4 的原因和解决办法

问题 用 QQ 的截图录屏功能录制的 mp4 视频&#xff0c;无法用 <video> 标签正常播放。 原因 通过搜索的说法是&#xff1a; 查阅文档&#xff08;不知道是啥文档&#xff09;&#xff0c;关于video标签所支持的视频格式和编码&#xff1a; MPEG4 带有H.264视频编码和…

【Windows Server 2019】发布服务器 | 远程桌面服务的安装与配置 Ⅰ——理论,实验拓扑和安装基于RemoteAPP的RDS

目录1. 理论1.1 什么是远程桌面服务2. 实验拓扑2.1 拓扑说明3. 安装基于RemoteAPP的RDS关联博文1. 理论 1.1 什么是远程桌面服务 远程桌面服务 (RDS) 是一个卓越的平台&#xff0c;可以生成虚拟化解决方案来满足每个最终客户的需求&#xff0c;包括交付独立的虚拟化应用程序、…

茂名市 2021 年高中信息技术学科素养展评

没事干&#xff0c;发一下去年去比赛的题目。 目录 第一题 30分 第二题 30分 第一题 30分 题目&#xff1a; “姐姐&#xff0c;乘除法运算太难了&#xff0c;有什么办法能熟练掌握吗&#xff1f;”今年 读小学四年级的表弟向李红求救。为了提高表弟的运算能力&#xff0c;…

Candence allegro 创建等长的方法

随着源同步时序电路的发展,越来越多的并行总线开始采用这种时序控制电路,最典型的代表当属目前炙手可热的DDRx系列。下图这种点到点结构的同步信号,对于攻城狮来说,设置等长约束就非常easy了图片。 But,对于有4、6、8、、、等多颗DDR芯片的ACC同步信号来说,要设置等长约束…

在Excel中按条件筛选数据并存入新的表

案例 老板想要看去年每月领料数量大于1000的数据。手动筛选并复制粘贴出来,需要重复操作12次,实在太麻烦了,还是让Python来做吧。磨刀不误砍柴工,先整理一下思路: 1读取原表,将数量大于1000的数据所对应的行整行提取(如同在excel表中按数字筛选大于1000的) 2将提取的数…

Mysql安装和基本使用

MySQLMySQL 是一个关系型数据库管理系统&#xff0c;由瑞典 MySQL AB 公司开发&#xff0c;目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统&#xff0c;关联数据库将数据保存在不同的表中&#xff0c;而不是将所有数据放在一个大仓库内&#xff0c;这样就增加了速度并提…

Linux 驱动基础

注册驱动模块时给模块传递参数 在一些情况下&#xff0c;我们要动态的改变驱动中某个变量的值&#xff0c;那么就可以在注册时给驱动模块传递参数。 给驱动模块中传递参数&#xff0c;需要定义好接受参数值的全局变量&#xff0c;并调用module_param 来引用它&#xff0c;具体…

Spring架构篇--2.6 远程通信基础--Rpc-Socket实战篇

前言&#xff1a;微服务之间怎么通过socket完成通信&#xff1b;本文通过demo 展示微服务如何通过socket 完成服务之间的通信&#xff1b; 1 使用maven新建两个springboot 服务&#xff1a;模拟实现订单通过订单号获取商品信息&#xff1a; 1.1 创建建springboot 项目后&…

1080T、2080T、4070T显卡的深度学习性能测试和结论

先说结论&#xff1a; 4070T显卡FP32的训练和推理速度跟3090应该基本类似。但由于显存12G偏低&#xff0c;4070T不太适合如今的深度学习模型训练&#xff08;新手列外&#xff0c;大部分模型都能训练起来&#xff0c;耗电也相对很低&#xff09;&#xff0c;更适合测试最新的一…

记录一次ubuntu下配置ssh登录出现的问题

现象描述: 1. 配置完服务器端公钥和本地的私钥之后&#xff0c;ssh登录始终会让输入密码&#xff0c;用ssh -vvv rootip 查看发现发送密钥之后就没反应了。 本机debug info: debug1: Trying private key: C:\Users\wangc/.ssh/id_xxxx &#xff08;私钥文件&#xff09; debug3…

每日站会如何进行优化流程,更高效?

1、每日站会时间要求 每日站会是开发团队一个以15分钟为限的活动。每日站会每一天的上午9点准时在会议室举行。开会时间需要把握精准&#xff0c;并需要每天坚持进行站会讨论活动。 每日站会如何进行优化流程&#xff0c;更高效&#xff1f;​ 2、团队中站会的角色和职责…

Unity(三)--导入3d模型并实现UGUI界面上嵌入3d模型

Unity支持的常用模型格式及建模软件: 格式建模软件网格动画材质骨骼FBX3DMax,C4D,Blender,Maya等√√√√OBJ3DMax,C4D,Blender,Maya等√目录 导入模型并调整好位置创建2D场景(UGUI)使3d模型显示在图片前面方法一:使用Render Texture注意点导入模型并调整好位置 以FBX为例,…

SAP MM 物料管理模块入门学习笔记 2023.2.24

https://zhuanlan.zhihu.com/p/555022893 SAP 企业组织结构 SAP 物料管理模块企业组织结构从上到下分为 集团——》公司——》工厂——》库存地点 集团&#xff1a;SAP 系统组织结构最高级别&#xff1a;内部包括一个完整的SAP系统全部数据 公司代码&#xff1a; 标识集团内一…