simexis / image-optimizer
使用PHP轻松优化图像
Requires
- php: ^7.0
- symfony/process: ^2.8|^3.0|^4.0
Requires (Dev)
- phpunit/phpunit: ^6.2|^7.0
- symfony/var-dumper: ^3.0|^4.0
This package is auto-updated.
Last update: 2024-09-15 00:52:10 UTC
README
该软件包可以通过一系列不同的图像优化工具来优化PNG、JPG、SVG和GIF文件。以下是使用方法:
use Simexis\ImageOptimizer\OptimizerChainFactory; $optimizerChain = OptimizerChainFactory::create(); $optimizerChain->optimize($pathToImage);
位于$pathToImage
的图像将被优化版本覆盖,该版本应该更小。软件包将自动检测系统上安装了哪些优化二进制文件并使用它们。
以下是该软件包已完成的示例转换。
喜欢Laravel?那么请前往特定于Laravel的集成。
使用WordPress?那么请尝试WP CLI命令。
安装
您可以通过composer安装此软件包
composer require simexis/image-optimizer
优化工具
如果系统上存在,该软件包将使用这些优化器
以下是如何在Ubuntu上安装所有优化器的说明
sudo apt-get install jpegtran sudo apt-get install optipng sudo apt-get install pngquant sudo npm install -g svgo sudo apt-get install gifsicle
以下是如何在MacOS(使用Homebrew)上安装二进制文件的说明
brew install jpegtran brew install optipng brew install pngquant brew install svgo brew install gifsicle
哪些工具会做什么?
该软件包将自动决定针对特定图像使用哪些工具。
JPGs
JPGs将通过JpegTran来减小。以下选项被使用
-optimize
.
PNGs
PNGs将通过两个工具来减小。第一个是Pngquant 2,一个有损PNG压缩器。我们设置了无额外选项,使用它们的默认值。之后我们将图像通过第二个工具:Optipng。以下选项被使用
-i0
:这将生成一个非交织、渐进式扫描的图像-o2
:这将优化级别设置为2(多个IDAT压缩尝试)
SVGs
SVGs将通过SVGO进行压缩。将使用SVGO的默认配置,省略了cleanupIDs
插件,因为该插件已知在单页上显示多个优化SVG时会引起问题。
请注意,SVGO可能会破坏您的svg。您可以在Sara Soueidan的这篇优秀的博客文章中找到更多关于此的信息。
GIFs
GIFs将通过Gifsicle进行优化。以下选项将被使用
-O3
:这将优化级别设置为Gifsicle的最大值,这将产生最慢但最好的结果
使用方法
这是使用软件包的默认方式
use Simexis\ImageOptimizer\OptimizerChainFactory; $optimizerChain = OptimizerChainFactory::create(); $optimizerChain->optimize($pathToImage);
位于$pathToImage
的图像将被优化版本覆盖,该版本应该更小。
软件包将自动检测系统上安装了哪些优化二进制文件并使用它们。
要保留原始图像,可以通过传递第二个参数optimize
use Simexis\ImageOptimizer\OptimizerChainFactory; $optimizerChain = OptimizerChainFactory::create(); $optimizerChain->optimize($pathToImage, $pathToOutput);
在该示例中,软件包不会触摸$pathToImage
并将优化版本写入到$pathToOutput
。
设置超时
您可以通过调用 setTimeout
来设置链中每个优化器最多可以使用的时间(以秒为单位)。
$optimizerChain ->setTimeout(10) ->optimize($pathToImage);
在本例中,链中的每个优化器将获得最多10秒的时间来完成其工作。
创建自己的优化链
如果您想自定义优化器链,可以通过手动将 Optimizer
添加到 OptimizerChain
来实现。
以下是一个示例,我们只想使用 optipng
和 jpegtran
。
use Simexis\ImageOptimizer\OptimizerChain; use Simexis\ImageOptimizer\Optimizers\Jpegtran; use Simexis\ImageOptimizer\Optimizers\Pngquant; $optimizerChain = (new OptimizerChain) ->addOptimizer(new Jpegtran([ '--strip-all', '--all-progressive', ])) ->addOptimizer(new Pngquant([ '--force', ]))
请注意,您可以向 Optimizer
的构造函数传递它应该使用的选项。
编写自定义优化器
想要使用其他命令行工具来优化您的图像?没问题。只需编写自己的优化器。优化器是实现 Simexis\ImageOptimizer\Optimizers\Optimizer
接口类的任何类。
namespace Simexis\ImageOptimizer\Optimizers; use Simexis\ImageOptimizer\Image; interface Optimizer { /** * Returns the name of the binary to be executed. * * @return string */ public function binaryName(): string; /** * Determines if the given image can be handled by the optimizer. * * @param \Simexis\ImageOptimizer\Image $image * * @return bool */ public function canHandle(Image $image): bool; /** * Set the path to the image that should be optimized. * * @param string $imagePath * * @return $this */ public function setImagePath(string $imagePath); /** * Set the options the optimizer should use. * * @param array $options * * @return $this */ public function setOptions(array $options = []); /** * Get the command that should be executed. * * @return string */ public function getCommand(): string; }
如果您想查看示例实现,请查看此包中提供的现有优化器:现有优化器。
您可以通过在 OptimizerChain
上使用 addOptimizer
方法轻松添加自己的优化器。
use Simexis\ImageOptimizer\ImageOptimizerFactory; $optimizerChain = OptimizerChainFactory::create(); $optimizerChain ->addOptimizer(new YourCustomOptimizer()) ->optimize($pathToImage);
示例转换
以下是此包执行的一些真实示例转换。
png
原始:Photoshop '网页保存' | 带透明度的 PNG-24
40 Kb
优化后
16 Kb (40%)
jpg
原始:Photoshop '网页保存' | 质量 60,已优化
547 Kb
优化后
525 Kb (95%)
致谢:Jeff Sheldon,via Unsplash
svg
原始:Illustrator | 网页优化 SVG 导出
26 Kb
优化后
20 Kb (76%)
变更日志
有关最近更改的更多信息,请参阅 变更日志。
测试
composer test
贡献
有关详细信息,请参阅 贡献指南。
安全性
如果您发现任何与安全相关的问题,请通过电子邮件 freek@simexis.be 联系我们,而不是使用问题跟踪器。
明信片软件
您可以使用此包(它是 MIT-授权 的),但如果它进入了您的生产环境,我们非常希望您能从家乡给我们寄一张明信片,并说明您正在使用我们哪个包。
我们的地址是:Simexis,Samberstraat 69D,2060 安特卫普,比利时。
我们将发布收到的所有明信片 在我们的公司网站上。
致谢
本包受 psliwa/image-optimizer 启发。
由 Joke Forment 提供,情感支持。
支持我们
Simexis 是一家位于比利时安特卫普的网页设计公司。您可以在我们的网站上找到我们所有开源项目的概述 在这里。
您的业务是否依赖于我们的贡献?请与我们联系,在 Patreon 上支持我们。所有承诺都将用于分配人员以维护和新奇事物。
许可证
MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件。