部署 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');📌 宝塔面板用户常见问题
权限问题:
- 确保 Web 服务器用户(通常是
www或www-data)对图片文件有读写权限 - 如果遇到
Permission denied,可以:chown www:www /path/to/your/images -R
- 确保 Web 服务器用户(通常是
工具找不到:
- 安装完工具后,重启 PHP-FPM 让环境变量生效(宝塔面板里可操作)
或在代码里指定二进制文件路径:
(new Jpegoptim(['--max=85']))->setBinaryPath('/usr/bin/jpegoptim');
超时设置:
处理大图时可能耗时较长,建议设置超时:
$optimizerChain->setTimeout(60); // 每个工具最多执行 60 秒
📊 预期效果
根据官方测试,这套组合的效果非常显著:
- JPG 压缩:可减少 33.7% 体积
- PNG 压缩:可减少 60% 左右体积(配合 pngquant+optipng)
- WEBP 压缩:可减少 60% 左右
这正是在你自有服务器上能实现的“压缩率之王”方案!
总结一下:
- SSH 安装
pngquant、jpegoptim等工具 - Composer 安装
spatie/image-optimizer - 写几行 PHP 代码即可调用
如果在安装工具或写代码的过程中遇到具体问题,随时告诉我,我来帮你解决!
“包是方向盘,工具是发动机”——这个比喻太到位了。以前不懂,装完包发现没效果,原来是少了底层依赖。
刚在服务器上试了这套流程,pngquant --version 出来版本号的那一刻,舒服了。发动机装好了,剩下的就是踩油门。