当前位置: 首页 > news >正文

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

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 = 500img_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知识。

相关文章:

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

gif动图无损压缩1、引言2、代码实战2.1 模块介绍2.2 安装2.3 代码示例3、总结1、引言 小屌丝:鱼哥, 求助~ 求助~ 求助~ 小鱼:你这是告诉我,重要的事情 说三遍吗? 小屌丝:你可以这么理解。 小鱼&#xff1a…...

文献阅读 An implementation of the seismic resolution enhancing network based on GAN

题目 An implementation of the seismic resolution enhancing network based on GAN 基于GAN的地震分辨率增强网络的实现 摘要 对于地震数据,本文利用深度学习来学习不同层次的特征并将它们合并以恢复缺失的分辨率。 将GAN网络引入到地震数据处理;对…...

Google员工说出了我不敢说的心里话!

前言:本文来自Beyond的投稿,码农翻身做了修改。今天在Medium上看到一篇文章《The maze is in the mouse》,是一个刚从Google离职的员工写的,揭开了Google内部的各种问题,引发了很多人的共鸣,到目前为止&…...

“御黑行动”进行中,三月重保单位已开放接入!

三月重保在即,对于诸多政企单位来说,正面临着特殊时期的安全保障工作这一重要“大考”。 面对越来越专业且隐匿的攻击,各单位承受着巨大压力,尤其是政府、国企、央企等具有重要地位及广泛社会影响面的单位,其网站及业务…...

taobao.top.oaid.client.decrypt( 端侧OAID解密 )

¥开放平台免费API不需用户授权 解码OAID(Open Addressee ID),返回收件人信息。该接口用于客户端直接查看订单隐私数据,解密数据不经过ISV服务器,且包含风控等安全检测。 公共参数 请求地址: HTTP地址:http://gw.api.ta…...

QT+OpenGL鼠标操作和模型控制

文章目录QTOpenGL鼠标操作和模型控制鼠标拾取理论有点小复杂从鼠标计算射线第 0 步:2D 视口坐标第 1 步:3d归一化设备坐标第 2 步:4d齐次剪辑坐标第 3 步:4d眼(相机)坐标第 4 步:4d 世界坐标代码展示模型控制多模型加载…...

爱奇艺“资产重定价”:首次全年运营盈利是拐点,底层逻辑大改善

长视频行业历时一年有余的降本增效、去肥增瘦,迎来首个全周期圆满收官的玩家。 北京时间2月22日美股盘前,爱奇艺发布2022年Q4及全年财报,Q4 Non-GAAP净利润明显超越预期,且首次实现全年运营盈利。受业绩提振,爱奇艺盘…...

MySQL —— 库的操作

文章目录1. 创建数据库2. 字符集和校验规则3. 数据库的基本操作3.1 查看数据库3.2 显示创建数据库的语句3.3 修改数据库3.4 删除数据库3.5 备份,还原数据库4. 查看数据库的连接情况1. 创建数据库 基本语法: create database if not exists 数据库名 选项…...

修改shell的命令提示符

以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。 一、命令提示符格式 从虚拟控制台登陆后,或者从桌面环境的终端进入shell后,就可以看见shell的命令提示符,这意味着可以输入命令了。注意&#xff…...

介绍并比较Apache Hive支持的文件格式

Apache Hive 支持几种熟知的Hadoop使用的文件格式,Hive也能加载并查询其他Hadoop组件创建的不同文件格式,如Pig或MapReduce。本文对比Hive不同文件格式,如:TextFile, SequenceFile, RCFile, AVRO, ORC,Parquet,Clouder…...

C语言之文件操作

目录 一、什么是文件? 二、C语言如何操作文件 1.操作方式 2.文件指针 2.1 定义文件指针 2.2文件的打开与关闭 2.3文件的顺序读写 2.3文件的随机读写 总结 一、什么是文件? 在电脑磁盘的上的文件。在程序设计中,分为两种:程序…...

Linux->父子进程初识和进程状态

目录 前言: 1. 父子进程创建 2. 进程状态 R(running)状态: S(sleep)状态: D(disk sleep)状态: T(stopped)状态: X(dead)和Z(zombie)状态: 孤儿进程: 前言: 本篇主要讲解关…...

【Linux学习笔记】5.Linux 用户和用户组管理

前言 本章介绍Linux的用户和用户组管理。 Linux 用户和用户组管理 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。 用户的账号一方面可以…...

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

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

【软件测试】测试人不躺平,进军高级自动化测试自救,你的不一样结局......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 随着测试从业年龄的…...

win10环境下安装java开发环境安装java

一:环境介绍 安装系统版本:win10 java版本:java SE 17 二:下载Java安装包 官网下载Java安装包:Java Downloads | Oracle 中国 选择需要的Java版本进行下载,如果没有要选择的版本,可以选择最新…...

【华为OD机试模拟题】用 C++ 实现 - 开心消消乐(2023.Q1)

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…...

opencv图像融合

大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页: lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…...

没有经验的时候,怎么搞定面试?

在之前的面试技巧,如何写简历上面,我讲了一些方法,希望大家重 视起来。核心其实就一点:他们想要你表现什么能力,以及你在 这个能力之外还有什么。 看清楚这句话的含义,你就可以做到百发百中。具体怎么训练&…...

整数保序的离散化(C/C++)

目录 1. 离散化的概念 1.1 离散化的运用思路 1.2 离散化的方法 1.2.1 排序 1.2.2 确定一个元素离散化后的结果 1.3 案例分析 1.3.1 1.3.2 区间和 (来源:Acwing) 1. 离散化的概念 离散化,把无限空间中有限的个体映射到有限的…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...

如何在Windows本机安装Python并确保与Python.NET兼容

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...

深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙

WebGL:在浏览器中解锁3D世界的魔法钥匙 引言:网页的边界正在消失 在数字化浪潮的推动下,网页早已不再是静态信息的展示窗口。如今,我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室,甚至沉浸式的V…...