首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
V2EX  ›  分享创造

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

  •  2
     
  •   xiaoz · 56 天前 · 1505 次点击
    这是一个创建于 56 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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
    
    • /yourpath/img_compress.sh为脚本的绝对路径
    • /data/wwwroot/imgurl为图片的绝对路径

    对比 tinyPNG

    • tinyPNG 方案:压缩效率好、有损压缩、速度较慢、有免费次数限制
    • OptiPNG、jpegoptim 方案:无损压缩,可自定义压缩等级,压缩速度取决于压缩等级和你服务配置

    最后

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

    10 回复  |  直到 2019-09-06 15:30:28 +08:00
        1
    JackieMe   56 天前
    还行,可以用来给博客里的插的图片瘦身。
        2
    zqjilove   56 天前
    点赞一下,可以替换自己写的 tinyPNG 定时压缩方法。
        3
    zqjilove   56 天前
    囧,貌似有问题,执行没有任何反馈,还是换回用自己写的稳妥
        4
    xiaoz   56 天前
    @zqjilove tinyPNG 还是不错的,就是每次请求接口会有点慢。执行没有任何反馈能详细说明一下吗?您那边如何操作的,具体遇到什么问题?
        5
    zqjilove   56 天前
    bash 执行脚本,没有报错,也没提示。不知道什么情况。图片存储路径配置,脚本路径配置都是正确的。
        6
    Lock   56 天前 via iPhone
    请问 win 下面有没有类似的工具,谢谢
        7
    xiaoz   56 天前
    @Lock Windows 不太清楚,你网上找一下呢。
        8
    menyakun   55 天前
    原本我用 GraphicsMagick 来处理图片,不过这玩意装起来麻烦的不行
        9
    yanjieee   52 天前
    效率如何,我们在做深度学习推理的时候,图片分辨率压缩是第一步,经常发现压缩和 IO 才是这整个推理过程的速度瓶颈。
        10
    sumonian   42 天前
    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.
    发现好像没有效果 帮忙看一下
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1079 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 23ms · UTC 23:26 · PVG 07:26 · LAX 16:26 · JFK 19:26
    ♥ Do have faith in what you're doing.