支持的图片格式

目前支持.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

调用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服务器环境下。

php 批量压缩上传图片,Linux环境下,使用Shell脚本自动批量压缩图片相关推荐

  1. linux下执行shell脚本文件,Linux下使用shell脚本自动执行脚本文件

    搜索热词 以下实例本人在Centos6.5 64位操作系统中使用 一.定时复制文件 a.在/usr/local/wfjb_web_back目录下创建 tomcatBack.sh文件 #将tomcat中 ...

  2. linux shell脚本自动批量解压文件

    单个文件解压很简单,批量不确定目录的压缩包呢?解压到原路径?解压后删除原压缩包?本脚本可一键解决以上所有问题 linux shell脚本自动批量解压文件 脚本免费下载地址: 传送门https://do ...

  3. PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)...

    源码地址:https://github.com/Tinywan/PHP_Experience 测试环境配置: 环境:Windows 7系统 .PHP7.0.Apache服务器 PHP框架:ThinkP ...

  4. 【Linux环境】简单Shell脚本实现定时备份文件、压缩、删除超时文件操作(showDoc文件备份脚本举例)

    Shell脚本备份数据的博文不少,这个应该算是比较简单的,没有复杂逻辑,分享一下. 1.备份脚本 Shell脚本的每行命令一定要在测试环境进行测试,否则会有意想不到的惊吓

  5. RHEL环境下调试Shell脚本时遇到字符串转换整数的问题

    字符串转整型!这种需求应该在编程语言里很常见,Shell里就太麻烦了.有人问为什么要转换?我遇到的问题是参数数量$#需要进行整型运算,而$#取出来的却是字符串,以下为证: if [ $# != 1 ] ...

  6. linux监控php脚本执行时间,在LINUX环境下定时执行php脚本

    1. 使用Crontab定时执行linux环境下的php脚本文件 Cron,它是一个linux下的定时执行工具.根用户以外的用户可以使用 crontab 工具来配置 cron 任务.所有用户定义的 c ...

  7. linux队列运行任务查看,Linux环境下批量执行队列任务的优雅方案

    设想我们有一个程序,需要在不同的参数下执行很多次,我们希望能够批量进行提交. 但是程序对系统的资源消耗比较大,而系统的资源是有限. 我们希望这些任务是按照队列排队提交的,每次只执行3个. 只有当队列中 ...

  8. linux设置密码报错automa,opensuse linux环境下ibm_websphere和ibm_db2安装以及DB2数据迁移操...

    opensuse linux环境下ibm_websphere和ibm_db2安装 ibm_websphere安装: 1.ibm官网下载免费版websphere,如下载文件名为BASETRIAL.age ...

  9. linux校园网客户端,Ubuntu Linux环境下校园网客户端安装使用

    最近发现好多兄弟姐妹不用Linux原因是在我们学校大大环境下上校园网有点费劲,或者干脆就不会弄,亦或者根本就没想到上网^_^ 这里我写上这么一段简单的过程,为了大家能够顺利上网,大牛直接掠过,不要喷我 ...

最新文章

  1. FASHION STORE OPENCART 2.X 自适应主题模板 ABC-0588
  2. audio标签不展示_设计标签式PPT:排版简洁明了,强烈信息秩序感,你想试试吗?...
  3. SpaceX完成“星舰”空中悬停,距载人探火星还远吗?
  4. 吴恩达作业3:利用深层神经网络实现小猫的分类
  5. Array,List,数据类型,caseclss模式匹配
  6. (winform)在一个form里面显示google地图
  7. 企业微信发布全国远程办公大数据:这些地方的企业最爱交流
  8. 【w3cschool】PHP语法简单复习
  9. Java开发环境搭建实验报告
  10. 蓝桥杯_Fibonacci数列(Java)
  11. namp常规扫描命令(超详细!推荐)
  12. 关于pandas的安装
  13. 互联网项目经理的职业规划
  14. uniapp 查看图片点击放大预览图片 单张 多张
  15. 华为计算机电话号码魔术,看完这6个操作,我终于相信华为手机真的有魔法!...
  16. API获取订单接口文档使用说明
  17. 一个简单有效的兼容IE7浏览器的办法
  18. Mac Edge 浏览器开启几秒后自动关闭问题
  19. 专业的WMS仓储管理系统?
  20. 多维表需求管理表自动生成TAPD需求

热门文章

  1. Revit二次开发 - 族库最近使用菜单
  2. 看过来!2021年最新PMP报名流程来了
  3. android Studio keytool' 不是内部或外部命令,也不是可运行的程序 或批处理文件
  4. 深度学习-Tensorflow使用Keras进行模型训练
  5. 影魔[AH2017/HNOI2017]
  6. ASP.NET MVC5+EF6+EasyUI 后台管理系统
  7. 3ds Max 2016怎样设置中文界面?
  8. 哪些大学计算机学术实力更强?计算机科学ESI前1‰学科出炉
  9. 【避免if else标准写法】阿里P7级别(年薪40w-70w)是如何避免用if else写代码
  10. VirgoTomcat