Linux 环境下,自动批量压缩图片的解决方案

2019-08-23 13:35:22 +08:00
 xiaoz

OptiPNG 和 jpegoptim 工具来可以对图片进行无损压缩,于是在此基础上编写了一个 shell 脚本来调用 OptiPNG、jpegoptim 工具自动完成批量压缩图片。

支持的图片格式

目前支持.jpg/.jpeg/.bmp/.png格式图片

实现原理

  1. 先使用find命令查找指定目录图片(同时对图片大小和时间进行了筛选)
  2. 根据不同的图片格式调用不同的压缩工具
  3. 配合 crontab 定时任务工具自动批量压缩

安装 OptiPNG 和 jpegoptim

Shell 脚本需要调用 OptiPNG 和 jpegoptim 这两个工具,安装 OptiPNG、jpegoptim 是必须的,这里仅以 CentOS 为列,其它 Linux 系统可自行搜索安装。

#安装 epel 源
yum -y install epel-release
#安装 OptiPNG
yum -y install optipng
#安装 jpegoptim
yum -y install jpegoptim

脚本使用

#下载批量压缩脚本
wget https://raw.githubusercontent.com/helloxz/shell/master/img_compress.sh
#执行 shell 脚本
bash img_compress.sh /data/wwwroot/imgurl

定时执行

#先将脚本赋予执行权限
chmod +x img_compress.sh
#添加定时任务
crontab -e
#将内容复制到最后并保存(每小时执行一次)
*/60  * * * * /yourpath/img_compress.sh /data/wwwroot/imgurl > /dev/null
#重载 crontab
service crond reload

对比 tinyPNG

最后

脚本默认查找 60 分钟以内曾被修改过的图片文件(再加上定时任务 1 小时执行一次,这样就不会去压缩重复的图片),并且大于 100kb 的图片才会进行压缩,您也可以下载脚本后对这些设定自行做出修改(图片的压缩等级也可以适当修改)。此方案适用于图片存放在 Linux 服务器环境下。

4532 次点击
所在节点    分享创造
12 条回复
JackieMe
2019-08-23 14:21:08 +08:00
还行,可以用来给博客里的插的图片瘦身。
zqjilove
2019-08-23 16:36:58 +08:00
点赞一下,可以替换自己写的 tinyPNG 定时压缩方法。
zqjilove
2019-08-23 16:53:15 +08:00
囧,貌似有问题,执行没有任何反馈,还是换回用自己写的稳妥
xiaoz
2019-08-23 16:55:49 +08:00
@zqjilove tinyPNG 还是不错的,就是每次请求接口会有点慢。执行没有任何反馈能详细说明一下吗?您那边如何操作的,具体遇到什么问题?
zqjilove
2019-08-23 17:04:23 +08:00
bash 执行脚本,没有报错,也没提示。不知道什么情况。图片存储路径配置,脚本路径配置都是正确的。
Lock
2019-08-23 18:27:59 +08:00
请问 win 下面有没有类似的工具,谢谢
xiaoz
2019-08-23 18:57:12 +08:00
@Lock Windows 不太清楚,你网上找一下呢。
menyakun
2019-08-24 12:49:26 +08:00
原本我用 GraphicsMagick 来处理图片,不过这玩意装起来麻烦的不行
yanjieee
2019-08-27 18:23:29 +08:00
效率如何,我们在做深度学习推理的时候,图片分辨率压缩是第一步,经常发现压缩和 IO 才是这整个推理过程的速度瓶颈。
sumonian
2019-09-06 15:30:28 +08:00
sh img_compress.sh /root/picture
/root/picture/263bed6df71a93b0e6c6f8c6a120949f.jpg 1920x1200 24bit N JFIF [OK] 279693 --> 279693 bytes (0.00%), skipped.
/root/picture/c09bb081b3cd0b363fb7bc3d2e0c8565.jpg 2560x1600 24bit N JFIF [OK] 124594 --> 124594 bytes (0.00%), skipped.
/root/picture/47be1a725fae55a11ca3ccc5d94b6421.jpeg 1920x1200 24bit N JFIF [OK] 202980 --> 202980 bytes (0.00%), skipped.
发现好像没有效果 帮忙看一下
xiaoz
2020-11-06 23:01:25 +08:00
@sumonian #10 说明你的图片应该是已经被其它工具压缩过了。
gogocome
2022-07-28 12:49:09 +08:00
能调整图片尺寸吗(长和宽)?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/594476

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX