php 批量压缩上传图片,Linux环境下,使用Shell脚本自动批量压缩图片
支持的图片格式
目前支持.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脚本自动批量压缩图片相关推荐
- linux下执行shell脚本文件,Linux下使用shell脚本自动执行脚本文件
搜索热词 以下实例本人在Centos6.5 64位操作系统中使用 一.定时复制文件 a.在/usr/local/wfjb_web_back目录下创建 tomcatBack.sh文件 #将tomcat中 ...
- linux shell脚本自动批量解压文件
单个文件解压很简单,批量不确定目录的压缩包呢?解压到原路径?解压后删除原压缩包?本脚本可一键解决以上所有问题 linux shell脚本自动批量解压文件 脚本免费下载地址: 传送门https://do ...
- PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)...
源码地址:https://github.com/Tinywan/PHP_Experience 测试环境配置: 环境:Windows 7系统 .PHP7.0.Apache服务器 PHP框架:ThinkP ...
- 【Linux环境】简单Shell脚本实现定时备份文件、压缩、删除超时文件操作(showDoc文件备份脚本举例)
Shell脚本备份数据的博文不少,这个应该算是比较简单的,没有复杂逻辑,分享一下. 1.备份脚本 Shell脚本的每行命令一定要在测试环境进行测试,否则会有意想不到的惊吓
- RHEL环境下调试Shell脚本时遇到字符串转换整数的问题
字符串转整型!这种需求应该在编程语言里很常见,Shell里就太麻烦了.有人问为什么要转换?我遇到的问题是参数数量$#需要进行整型运算,而$#取出来的却是字符串,以下为证: if [ $# != 1 ] ...
- linux监控php脚本执行时间,在LINUX环境下定时执行php脚本
1. 使用Crontab定时执行linux环境下的php脚本文件 Cron,它是一个linux下的定时执行工具.根用户以外的用户可以使用 crontab 工具来配置 cron 任务.所有用户定义的 c ...
- linux队列运行任务查看,Linux环境下批量执行队列任务的优雅方案
设想我们有一个程序,需要在不同的参数下执行很多次,我们希望能够批量进行提交. 但是程序对系统的资源消耗比较大,而系统的资源是有限. 我们希望这些任务是按照队列排队提交的,每次只执行3个. 只有当队列中 ...
- linux设置密码报错automa,opensuse linux环境下ibm_websphere和ibm_db2安装以及DB2数据迁移操...
opensuse linux环境下ibm_websphere和ibm_db2安装 ibm_websphere安装: 1.ibm官网下载免费版websphere,如下载文件名为BASETRIAL.age ...
- linux校园网客户端,Ubuntu Linux环境下校园网客户端安装使用
最近发现好多兄弟姐妹不用Linux原因是在我们学校大大环境下上校园网有点费劲,或者干脆就不会弄,亦或者根本就没想到上网^_^ 这里我写上这么一段简单的过程,为了大家能够顺利上网,大牛直接掠过,不要喷我 ...
最新文章
- FASHION STORE OPENCART 2.X 自适应主题模板 ABC-0588
- audio标签不展示_设计标签式PPT:排版简洁明了,强烈信息秩序感,你想试试吗?...
- SpaceX完成“星舰”空中悬停,距载人探火星还远吗?
- 吴恩达作业3:利用深层神经网络实现小猫的分类
- Array,List,数据类型,caseclss模式匹配
- (winform)在一个form里面显示google地图
- 企业微信发布全国远程办公大数据:这些地方的企业最爱交流
- 【w3cschool】PHP语法简单复习
- Java开发环境搭建实验报告
- 蓝桥杯_Fibonacci数列(Java)
- namp常规扫描命令(超详细!推荐)
- 关于pandas的安装
- 互联网项目经理的职业规划
- uniapp 查看图片点击放大预览图片 单张 多张
- 华为计算机电话号码魔术,看完这6个操作,我终于相信华为手机真的有魔法!...
- API获取订单接口文档使用说明
- 一个简单有效的兼容IE7浏览器的办法
- Mac Edge 浏览器开启几秒后自动关闭问题
- 专业的WMS仓储管理系统?
- 多维表需求管理表自动生成TAPD需求
热门文章
- Revit二次开发 - 族库最近使用菜单
- 看过来!2021年最新PMP报名流程来了
- android Studio keytool' 不是内部或外部命令,也不是可运行的程序 或批处理文件
- 深度学习-Tensorflow使用Keras进行模型训练
- 影魔[AH2017/HNOI2017]
- ASP.NET MVC5+EF6+EasyUI 后台管理系统
- 3ds Max 2016怎样设置中文界面?
- 哪些大学计算机学术实力更强?计算机科学ESI前1‰学科出炉
- 【避免if else标准写法】阿里P7级别(年薪40w-70w)是如何避免用if else写代码
- VirgoTomcat