该软件包可以通过一系列各种图像优化工具运行 PNG、JPG、WEBP、AVIF、SVG 和 GIF 来优化它们。使用方法如下:
使用 SpatieImageOptimizerOptimizerChainFactory;$optimizerChain = OptimizerChainFactory::create();$optimizerChain->optimize($pathToImage);
$pathToImage
处的图像将被更小的优化版本覆盖。该软件包将自动检测您的系统上安装了哪些优化二进制文件并使用它们。
以下是该包完成的一些示例转换。
喜欢 Laravel?然后转到 Laravel 特定集成。
使用WordPress?然后尝试 WP CLI 命令。
SilverStripe 爱好者?不要浪费时间,请转到 SilverStripe 模块。
我们投入了大量资源来创建一流的开源包。您可以通过购买我们的一款付费产品来支持我们。
我们非常感谢您从家乡寄给我们一张明信片,并注明您正在使用我们的哪种套餐。您可以在我们的联系页面上找到我们的地址。我们在虚拟明信片墙上发布所有收到的明信片。
您可以通过 Composer 安装该软件包:
作曲家需要空间/图像优化器
如果您的系统上存在这些优化器,该软件包将使用它们:
杰普优化
优化
彭量化2
SVGO 1
动画棒
网络程序
阿维芬
以下是在 Ubuntu/Debian 上安装所有优化器的方法:
sudo apt-get install jpegoptim sudo apt-get install optipng sudo apt-get install pngquant 须藤 npm install -g svgo 须藤 apt-get 安装 gifsicle sudo apt-get install webp sudo apt-get install libavif-bin # 最低版本 0.9.3
以下是在 MacOS 上安装二进制文件的方法(使用 Homebrew):
酿造安装jpegoptim 酿造安装选项 酿造安装pngquant npm 安装-g svgo 酿造安装gifsicle 酿造安装WebP 酿造安装libavif
以下是在 Fedora/RHEL/CentOS 上安装二进制文件的方法:
sudo dnf 安装 epel-release 须藤 dnf 安装 jpegoptim sudo dnf 安装 optipng 须藤 dnf 安装 pngquant 须藤 npm install -g svgo sudo dnf 安装 gifsicle sudo dnf 安装 libwebp-tools sudo dnf 安装 libavif-tools
该软件包将自动决定在特定图像上使用哪些工具。
通过 JpegOptim 运行 JPG 将会变小。使用这些选项:
-m85
:这将以 85% 的质量存储图像。此设置似乎满足 Google 的 Pagespeed 压缩规则
--strip-all
:这会删除所有文本信息,例如注释和 EXIF 数据
--all-progressive
:这将确保生成的图像是渐进式图像,这意味着可以使用逐步更高细节的多次传递来下载它。
通过两个工具运行 PNG 可以使其变小。第一个是 Pngquant 2,一个有损 PNG 压缩器。我们没有设置额外的选项,使用它们的默认值。之后,我们通过第二个图像运行图像:Optipng。使用这些选项:
-i0
:这将产生非隔行、逐行扫描图像
-o2
:这将优化级别设置为二级(多次 IDAT 压缩试验)
SVG 将被 SVGO 缩小。将使用 SVGO 的默认配置,省略cleanupIDs
和removeViewBox
插件,因为已知这些插件在一页上显示多个优化的 SVG 时会引起问题。
请注意 SVGO 可能会破坏您的 svg。您可以在 Sara Soueidan 撰写的这篇精彩博文中找到更多相关信息。
GIF 将通过 Gifsicle 进行优化。将使用这些选项:
-O3
:这将优化级别设置为 Gifsicle 的最大值,这会产生最慢但最好的结果
WEBP 将由 Cwebp 进行优化。将使用这些选项:
-m 6
使用最慢的压缩方法以获得最佳压缩效果。
-pass 10
用于最大化分析遍数。
-mt
多线程以提高一些速度。
-q 90
带来最不明显变化的品质因数。
(设置原始取自这里)
avifenc 将优化 AVIF。将使用这些选项:
-a cq-level=23
:恒定质量级别。较低的值意味着更好的质量和更大的文件大小 (0-63)。
-j all
:作业数量(工作线程, all
使用所有可用核心)。
--min 0
:颜色的最小量化器(0-63)。
--max 63
:颜色的最大量化器(0-63)。
--minalpha 0
: alpha 的最小量化器 (0-63)。
--maxalpha 63
: alpha 的最大量化器 (0-63)。
-a end-usage=q
速率控制模式设置为恒定质量模式。
-a tune=ssim
:SSIM 调整编码器的失真度。
(设置原始取自这里和这里)
这是使用该包的默认方式:
使用 SpatieImageOptimizerOptimizerChainFactory;$optimizerChain = OptimizerChainFactory::create();$optimizerChain->optimize($pathToImage);
$pathToImage
处的图像将被更小的优化版本覆盖。
该软件包将自动检测您的系统上安装了哪些优化二进制文件并使用它们。
要保留原始图像,您可以传递第二个参数optimize
:
使用 SpatieImageOptimizerOptimizerChainFactory;$optimizerChain = OptimizerChainFactory::create();$optimizerChain->optimize($pathToImage, $pathToOutput);
在该示例中,包不会触及$pathToImage
并将优化版本写入$pathToOutput
。
您可以通过调用setTimeout
设置链中每个优化器可以使用的最长时间(以秒为单位):
$optimizerChain->setTimeout(10) ->优化($pathToImage);
在此示例中,链中的每个优化器最多将有 10 秒的时间来完成其工作。
如果您想自定义优化器链,可以通过将Optimizer
手动添加到OptimizerChain
来实现。
这是一个我们只想使用optipng
和jpegoptim
示例:
使用 SpatieImageOptimizerOptimizerChain;使用 SpatieImageOptimizerOptimizersJpegoptim;使用 SpatieImageOptimizerOptimizersPngquant;$optimizerChain = (新 OptimizerChain) ->addOptimizer(new Jpegoptim([ '--strip-all', '--all-progressive', ])) ->addOptimizer(new Pngquant([ '--force', ]))
请注意,您可以将Optimizer
应使用的选项传递给其构造函数。
想要使用另一个命令行实用程序来优化您的图像?没问题。只需编写您自己的优化器即可。优化器是任何实现SpatieImageOptimizerOptimizersOptimizer
接口的类:
命名空间 SpatieImageOptimizerOptimizers;使用 SpatieImageOptimizerImage;接口优化器 {/** * 返回要执行的二进制文件的名称。 * * @return string */public function binaryName(): string;/** * 确定优化器是否可以处理给定的图像。 * * @param SpatieImageOptimizerImage $image * * @return bool */public function canHandle(Image $image): bool;/** * 设置要优化的图像的路径。 * * @param string $imagePath * * @return $this */public function setImagePath(string $imagePath);/** * 设置优化器应使用的选项。 * * @param array $options * * @return $this */public function setOptions(array $options = []);/** * 获取应该执行的命令。 * * @return string */public function getCommand(): string; }
如果您想查看示例实现,请查看此包附带的现有优化器。
您可以使用OptimizerChain
上的addOptimizer
方法轻松添加优化器。
使用 SpatieImageOptimizerImageOptimizerFactory;$optimizerChain = OptimizerChainFactory::create();$optimizerChain ->addOptimizer(new YourCustomOptimizer()) ->优化($pathToImage);
默认情况下,该包不会抛出任何错误,只是静默运行。要验证包正在做什么,您可以设置一个记录器:
使用 SpatieImageOptimizerOptimizerChainFactory;$optimizerChain = OptimizerChainFactory::create();$optimizerChain ->useLogger(new MyLogger()) ->优化($pathToImage);
记录器是一个实现PsrLogLoggerInterface
的类。 Monolog 是一个完全兼容的优秀日志库。该包将写入日志使用了哪些Optimizers
、执行了哪些命令及其输出。
以下是该包完成的一些现实生活示例转换。
JPG、WEBP、AVIF 图像的方法:原始图像已馈送到 spatie/image(使用默认的 GD 驱动程序)并调整为 2048px 宽度:
SpatieImageImage::load('original.jpg') ->宽度(2048) ->保存('图片.jpg'); // 图像.png、图像.webp、图像.avif
原来的
771 KB
优化
511 KB(-33.7%,DSSIM:0.00052061)
致谢:Jeff Sheldon,来自 Unsplash
原来的
461 KB
优化
184 KB(-60.0%,DSSIM:0.00166036)
致谢:Jeff Sheldon,来自 Unsplash
原来的
725 KB
优化
194 KB(-73.2%,DSSIM:0.00163751)
致谢:Jeff Sheldon,来自 Unsplash
原文:Photoshop“另存为网页”| PNG-24 透明
39KB
优化
16 KB(-59%,DSSIM:0.00000251)
原创:插画| Web 优化的 SVG 导出
25KB
优化
20 KB (-21.5%)
请参阅变更日志以了解最近更改的更多信息。
作曲家测试
详细信息请参阅贡献。
如果您发现有关安全的错误,请发送邮件至 [email protected],而不是使用问题跟踪器。
您可以自由使用这个软件包(它是 MIT 许可的),但如果它进入您的生产环境,我们非常感谢您从您的家乡给我们寄一张明信片,注明您正在使用我们的哪个软件包。
我们的地址是:Spatie, Kruikstraat 22, 2018 安特卫普, 比利时。
我们在公司网站上发布所有收到的明信片。
弗里克·范德赫滕
所有贡献者
这个包的灵感来自 psliwa/image-optimizer
Joke Forment 提供的情感支持
麻省理工学院许可证 (MIT)。请参阅许可证文件以获取更多信息。