ubuntu 服务器环境安装列表 pngquant + Spatie/image-optimizer 图像压缩

部署 pngquant + Spatie/image-optimizer。完整的部署流程。

整个部署分为三步:1. 安装底层工具 → 2. 通过 Composer 安装包 → 3. 写代码调用


🚀 完整部署指南(Ubuntu + 宝塔面板)

第一步:通过 SSH 安装底层优化工具(核心)

这是最关键的一步。你需要通过 SSH 连接到你的服务器(宝塔面板的终端或 Putty 均可),然后执行以下命令安装所有需要的工具:

# 更新软件包列表
sudo apt-get update

# 安装 JPEG 优化工具
sudo apt-get install jpegoptim

# 安装 PNG 优化工具(pngquant 和 optipng)
sudo apt-get install pngquant
sudo apt-get install optipng

# 安装 GIF 优化工具(可选,如果需要)
sudo apt-get install gifsicle

# 安装 WEBP 优化工具(可选,如果需要)
sudo apt-get install webp
注意:这些工具是 spatie/image-optimizer 的“发动机”,包本身只是“方向盘”。如果不安装它们,代码不会报错,但也不会起到压缩效果。

验证安装成功:安装完成后,可以运行以下命令查看版本,确认安装成功:

pngquant --version
jpegoptim --version

第二步:在项目里安装 Spatie Image Optimizer

进入你的项目根目录(通常宝塔的网站目录在 /www/wwwroot/你的网站),通过 Composer 安装:

composer require spatie/image-optimizer

如果你还没安装 Composer,需要先在服务器上安装它(宝塔面板通常有 PHP 扩展管理,但 Composer 需要单独装,可自行搜索“宝塔安装composer”)。

第三步:编写 PHP 代码调用

安装完成后,在代码里这样使用即可。最简方式如下:

<?php
require 'vendor/autoload.php';  // 引入 Composer 的自动加载

use Spatie\ImageOptimizer\OptimizerChainFactory;

// 创建优化链(会自动检测并使用你刚安装的 pngquant、jpegoptim 等)
$optimizerChain = OptimizerChainFactory::create();

// 直接优化图片(原图会被覆盖!)
$pathToImage = '/www/wwwroot/你的网站/uploads/my-image.jpg';
$optimizerChain->optimize($pathToImage);

// 如果你想保留原图,优化后输出到新路径
$optimizerChain->optimize($pathToImage, '/www/wwwroot/你的网站/uploads/my-image-optimized.jpg');

echo "图片优化完成!";

🔧 进阶自定义配置

如果你想微调压缩参数(比如调整 JPG 质量、PNG 压缩强度),可以自定义优化器:

<?php
require 'vendor/autoload.php';

use Spatie\ImageOptimizer\OptimizerChain;
use Spatie\ImageOptimizer\Optimizers\Jpegoptim;
use Spatie\ImageOptimizer\Optimizers\Pngquant;
use Spatie\ImageOptimizer\Optimizers\Optipng;

$optimizerChain = (new OptimizerChain)
    // JPG 压缩:质量设为 80,移除元数据,转为渐进式
    ->addOptimizer(new Jpegoptim([
        '--max=80',        // 质量 0-100
        '--strip-all',      // 移除所有元数据
        '--all-progressive' // 转为渐进式 JPEG
    ]))
    
    // PNG 压缩:先用 pngquant 做有损压缩(强制覆盖输出)
    ->addOptimizer(new Pngquant([
        '--force',           // 强制覆盖输出文件
        '--quality=65-80',   // 质量范围
        '--speed=1'          // 速度 1(最慢但压缩比最高)到 10(最快)
    ]))
    
    // 再用 optipng 做进一步的无损优化
    ->addOptimizer(new Optipng([
        '-i0',               // 非交错扫描
        '-o2',               // 优化级别 2(默认)
        '-strip all'         // 移除元数据
    ]));

// 执行优化
$optimizerChain->optimize('/path/to/image.jpg');

📌 宝塔面板用户常见问题

  1. 权限问题

    • 确保 Web 服务器用户(通常是 wwwwww-data)对图片文件有读写权限
    • 如果遇到 Permission denied,可以:chown www:www /path/to/your/images -R
  2. 工具找不到

    • 安装完工具后,重启 PHP-FPM 让环境变量生效(宝塔面板里可操作)
    • 或在代码里指定二进制文件路径:

      (new Jpegoptim(['--max=85']))->setBinaryPath('/usr/bin/jpegoptim');
  3. 超时设置

    • 处理大图时可能耗时较长,建议设置超时:

      $optimizerChain->setTimeout(60); // 每个工具最多执行 60 秒

📊 预期效果

根据官方测试,这套组合的效果非常显著:

  • JPG 压缩:可减少 33.7% 体积
  • PNG 压缩:可减少 60% 左右体积(配合 pngquant+optipng)
  • WEBP 压缩:可减少 60% 左右

这正是在你自有服务器上能实现的“压缩率之王”方案!


总结一下:

  1. SSH 安装 pngquantjpegoptim 等工具
  2. Composer 安装 spatie/image-optimizer
  3. 写几行 PHP 代码即可调用

如果在安装工具或写代码的过程中遇到具体问题,随时告诉我,我来帮你解决!

已有 12 条评论

    1. Lily Lily

      配完这个再配合 Laravel 的 Image 干预,整个上传流程自动压缩,用户体验直接拉满。

    2. Kevin Kevin

      简单三步,清晰明了。比官方文档还直观。

    3. Jack Jack

      验证安装成功那步很重要。我之前装完就以为好了,结果 jpegoptim 根本没装上。

    4. Ivy Ivy

      用 composer require 之前记得先确认 php-cli 版本,别问我为什么提醒。

    5. Harvey Harvey

      webp 那个可选安装我也装上了。现在浏览器都支持,能省不少流量。