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

支持的图片格式
目前支持.jpg/.jpeg/.bmp/.png格式图片
实现原理
- 先使用
find命令查找指定目录图片(同时对图片大小和时间进行了筛选) - 根据不同的图片格式调用不同的压缩工具
- 配合 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
/yourpath/img_compress.sh为脚本的绝对路径/data/wwwroot/imgurl为图片的绝对路径
对比 tinyPNG
- tinyPNG 方案:压缩效率好、有损压缩、速度较慢、有免费次数限制
- OptiPNG、jpegoptim 方案:无损压缩,可自定义压缩等级,压缩速度取决于压缩等级和你服务配置
最后
脚本默认查找 60 分钟以内曾被修改过的图片文件(再加上定时任务 1 小时执行一次,这样就不会去压缩重复的图片),并且大于 100kb 的图片才会进行压缩,您也可以下载脚本后对这些设定自行做出修改(图片的压缩等级也可以适当修改)。此方案适用于图片存放在 Linux 服务器环境下。