阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Linux环境下,使用Shell脚本自动批量压缩图片

202次阅读
没有评论

共计 3817 个字符,预计需要花费 10 分钟才能阅读完成。




在文章《CentOS 系统下多种图片压缩方案》中 xiaoz 介绍过 OptiPNG 和 jpegoptim 工具来对图片进行压缩,并且这两个工具都支持无损压缩,于是 xiaoz 编写了一个 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

调用 shell 脚本批量压缩

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

其中 /data/wwwroot/imgurl 修改为自己的图片目录(需要使用绝对路径),执行的效果如下:

[root@imgurl ~]# bash img_compress.sh /data/wwwroot/imgurl
** Processing: /data/wwwroot/imgurl/imgs/2019/08/a259e6290bacaf3c.png
1137x557 pixels, 3x8 bits/pixel, RGB
Input IDAT size = 112086 bytes
Input file size = 112395 bytes

Trying:
  zc = 9  zm = 9  zs = 0  f = 0         IDAT size = 74656
  zc = 9  zm = 8  zs = 0  f = 0         IDAT size = 74210

Selecting parameters:
  zc = 9  zm = 8  zs = 0  f = 0         IDAT size = 74210

Output IDAT size = 74210 bytes (37876 bytes decrease)
Output file size = 74483 bytes (37912 bytes = 33.73% decrease)

/data/wwwroot/imgurl/imgs/2019/08/58427da011079d66.jpg 2228x4006 24bit N Exif IPTC JFIF  [OK] 565511 --> 565481 bytes (0.01%), optimized.
/data/wwwroot/imgurl/imgs/2019/08/bbd6e6b825079540.jpg 1440x1090 24bit N JFIF  [OK] 358749 --> 358655 bytes (0.03%), optimized.
/data/wwwroot/imgurl/imgs/2019/08/c2afa79235ce19ec.jpg 1080x1920 24bit N JFIF  [OK] 215290 --> 215290 bytes (0.00%), skipped.
/data/wwwroot/imgurl/imgs/2019/08/af0225dd07a1d19a.jpg 1080x2340 24bit N JFIF  [OK] 145853 --> 145826 bytes (0.02%), optimized.
/data/wwwroot/imgurl/imgs/2019/08/bf49aa2868dd3892.jpg 1024x1318 24bit P JFIF  [OK] 128645 --> 128548 bytes (0.08%), optimized.
/data/wwwroot/imgurl/imgs/2019/08/3d012339766e8830.jpg 9933x7017 24bit N IPTC Exif ICC XMP JFIF  [OK] 2724463 --> 2724463 bytes (0.00%), skipped.
/data/wwwroot/imgurl/imgs/2019/08/751528874c3377ef.jpg 1024x1318 24bit P JFIF  [OK] 115894 --> 115871 bytes (0.02%), optimized.
/data/wwwroot/imgurl/imgs/2019/08/c4719f67827b47b5.jpg 2208x1242 24bit N Exif IPTC JFIF  [OK] 409022 --> 136213 bytes (66.70%), optimized.
/data/wwwroot/imgurl/imgs/2019/08/97e5c418839595f8.jpg 2208x1242 24bit N Exif IPTC JFIF  [OK] 409641 --> 143095 bytes (65.07%), optimized.
/data/wwwroot/imgurl/imgs/2019/08/cd1337dbe4a9de63.jpg 2208x1242 24bit N Exif IPTC JFIF  [OK] 369246 --> 130287 bytes (64.72%), optimized.
/data/wwwroot/imgurl/imgs/2019/08/643a8733650289fc.jpg 2208x1242 24bit N Exif IPTC JFIF  [OK] 469150 --> 182604 bytes (61.08%), optimized.
/data/wwwroot/imgurl/imgs/2019/08/3fa4595aafbdcec4.jpg 2208x1242 24bit N Exif IPTC JFIF  [OK] 498075 --> 193409 bytes (61.17%), optimized.
/data/wwwroot/imgurl/imgs/2019/08/6b3a4381757675e0.jpg 776x1173 24bit N JFIF  [OK] 294311 --> 212403 bytes (27.83%), optimized.
/data/wwwroot/imgurl/imgs/2019/08/c04b62741e71b4ab.jpg 2208x1242 24bit N Exif IPTC JFIF  [OK] 502573 --> 197138 bytes (60.77%), optimized.
/data/wwwroot/imgurl/imgs/2019/08/cc3e5311aa96dcd1.jpg 2560x1440 24bit N JFIF  [OK] 787748 --> 162981 bytes (79.31%), optimized.
/data/wwwroot/imgurl/imgs/2019/08/f1c439711b64a9f1.jpg 1229x1410 24bit N JFIF  [OK] 308777 --> 136253 bytes (55.87%), optimized.
/data/wwwroot/imgurl/imgs/2019/08/74c80a3b91d20c4e.jpg 1386x1920 24bit N Exif JFIF  [OK] 241196 --> 241196 bytes (0.00%), skipped.
/data/wwwroot/imgurl/imgs/2019/08/93f17bbf3f4e00d0.jpg 1056x984 24bit N Exif JFIF  [OK] 231805 --> 115288 bytes (50.27%), optimized.

crontab 定时执行

# 先将脚本赋予执行权限
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 服务器环境下。

扩展阅读:

脚本源码:https://github.com/helloxz/shell/blob/master/img_compress.sh

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计3817字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中