做了一个图片批量压缩小工具: tiny_gradio

一、背景

之前很早的时候搞了一个博客,但是一直没去打理它,最近放了一些文章上去,但是在配图体积方面有点问题,因为平常写公众号的时候会自动对图片做压缩,但是自己的博客没有。如果图片没做压缩,势必会影响访问速度,造成体验不佳。

我一般使用 tinyjpg进行压缩,有时候为了体积进一步减小,还会转成 webp 的格式。

但是图片数量一多手动上传就比较麻烦,所以就想着开发一个小工具提高下效率。

二、技术选型

在压缩方面,本来是想在Github上找找压缩库,后面发现其实 tinyjpg 开放了免费的API,每个月有500次,想一想也够自己使用了,所以选了这个。

申请地址: https://tinypng.com/developers

Tiny API的官方库支持Ruby ,PHP , Node.js , Python , Java.NET 编程语言,Python我比较熟,所以最终选择它。

我希望这个工具有UI,操作起来比较方便,而Python的GUI库中Gradio相对而言比较好看,所以最终的技术栈就是:Python + tinify + Gradio

三、项目实战

整个项目开发下来,比较难的在于使用 Gradio 绘制画面,因为之前并没接触过 Gradio ,需要一定的上手成本

我一开始设计的第一版是这样,但是这样设计有点问题,点击压缩按钮后,虽然成功压缩了图片,但界面上却没有地方展示输出的结果,导致不知道什么时候图片已经压缩成功。

随后第二版设计成这样,右边的输入框就是用来输出结果

这是界面的核心代码,主要是利用 Interface 实现了左边输入+右边输出的整体效果。

这里需要注意的是,inputs传入多少个组件,对应的执行函数 fn 就得有多少个参数

另外就是只用 Image组件只能实现单张图片上传的效果,所以为了实现选择多张图片的效果,采用的是 File+UploadButton 的组合形式

随后就是 tinify 的压缩代码

还有 webp 的转换代码,这里使用的是Python的 Pillow 库

四、注意事项

1、不同系统需要选择不同的requirements.txt

由于 tinify 依赖 requests库,而 requests 依赖 urllib3 库,在Mac上,如果 urllib3 的版本是 v2,极有可能会出现下面的问题,这时候使用 requirements_mac.txt 安装依赖即可

2、批量上传只能把图片都放在同一个文件夹下

由于Gradio的文件多选,并不支持在多个目录下批量选择文件,所以目前使用的话只能把图片都放在同一个文件夹下,这里才能实现批量上传,而且注意批量上传需要点击 Upload Multi Image 按钮

3、源码获取

关于源代码的获取,在AI技术巫公众号回复"图片压缩"就可以得到全部源码!

最后如果这个工具能帮到你的话,还请多多点赞,你的点赞是我不断更新的动力!

相关推荐
蒙娜丽宁10 分钟前
《Python OpenCV从菜鸟到高手》——零基础进阶,开启图像处理与计算机视觉的大门!
python·opencv·计算机视觉
光芒再现dev11 分钟前
已解决,部署GPTSoVITS报错‘AsyncRequest‘ object has no attribute ‘_json_response_data‘
运维·python·gpt·语言模型·自然语言处理
好喜欢吃红柚子25 分钟前
万字长文解读空间、通道注意力机制机制和超详细代码逐行分析(SE,CBAM,SGE,CA,ECA,TA)
人工智能·pytorch·python·计算机视觉·cnn
小馒头学python30 分钟前
机器学习是什么?AIGC又是什么?机器学习与AIGC未来科技的双引擎
人工智能·python·机器学习
神奇夜光杯39 分钟前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
千天夜1 小时前
使用UDP协议传输视频流!(分片、缓存)
python·网络协议·udp·视频流
测试界的酸菜鱼1 小时前
Python 大数据展示屏实例
大数据·开发语言·python
羊小猪~~1 小时前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
假装我不帅1 小时前
asp.net framework从webform开始创建mvc项目
后端·asp.net·mvc