simexis/image-optimizer

使用PHP轻松优化图像

1.0.2 2018-02-13 10:00 UTC

This package is auto-updated.

Last update: 2024-09-15 00:52:10 UTC


README

Latest Version on Packagist Build Status Total Downloads

该软件包可以通过一系列不同的图像优化工具来优化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 来实现。

以下是一个示例,我们只想使用 optipngjpegtran

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

Original

优化后
16 Kb (40%)

Optimized

jpg

原始:Photoshop '网页保存' | 质量 60,已优化
547 Kb

Original

优化后
525 Kb (95%)

Optimized

致谢:Jeff Sheldon,via Unsplash

svg

原始:Illustrator | 网页优化 SVG 导出
26 Kb

Original

优化后
20 Kb (76%)

Optimized

变更日志

有关最近更改的更多信息,请参阅 变更日志

测试

composer test

贡献

有关详细信息,请参阅 贡献指南

安全性

如果您发现任何与安全相关的问题,请通过电子邮件 freek@simexis.be 联系我们,而不是使用问题跟踪器。

明信片软件

您可以使用此包(它是 MIT-授权 的),但如果它进入了您的生产环境,我们非常希望您能从家乡给我们寄一张明信片,并说明您正在使用我们哪个包。

我们的地址是:Simexis,Samberstraat 69D,2060 安特卫普,比利时。

我们将发布收到的所有明信片 在我们的公司网站上

致谢

本包受 psliwa/image-optimizer 启发。

Joke Forment 提供,情感支持。

支持我们

Simexis 是一家位于比利时安特卫普的网页设计公司。您可以在我们的网站上找到我们所有开源项目的概述 在这里

您的业务是否依赖于我们的贡献?请与我们联系,在 Patreon 上支持我们。所有承诺都将用于分配人员以维护和新奇事物。

许可证

MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件