webllc/image-optimizer

图像优化/压缩库。这个库能够非常方便地优化png、jpg和gif文件。它使用了optipng、pngquant、pngcrush、pngout、gifsicle、jpegoptim和jpegtran工具。

2.1.1 2020-03-14 13:34 UTC

This package is auto-updated.

Last update: 2024-09-15 02:12:59 UTC


README

这是一个非常方便且易于使用的图像文件优化器。它使用了optipngpngquantjpegoptimsvgo等库,因此在使用之前,您应该在服务器上安装适当的库。项目包含Vagrantfile,定义了安装了所有库的测试虚拟机,因此您可以检查Vagrantfile来了解如何安装所有这些内容。

感谢ImageOptimizer及其使用的库,您的图像文件可以减小到原来的10%-70%。

安装

使用composer

composer require webllc/image-optimizer

基本用法

$factory = new webllc\ImageOptimizer\OptimizerFactory();
$optimizer = $factory->get();

$filepath = /* path to image */;

$optimizer->optimize($filepath);
//optimized file overwrites original one

配置

默认情况下,优化器不会抛出任何异常,如果文件无法优化或为给定文件安装的优化库不存在,优化器将不会修改原始文件。当您希望最终优化用户上传的文件时,这种行为是可接受的。当您在使用案例中,优化错误应导致异常时,ignore_errors选项特别为您创建。

这个库非常智能,您不需要配置ImageOptimizer使用的所有库的二进制文件路径,库将会在几个地方寻找这些二进制文件,因此如果二进制文件放置在标准位置,它们将自动被找到。

支持选项

  • ignore_errors (默认: true)
  • single_optimizer_timeout_in_seconds (默认: 60) - 当您想要控制优化持续的时间时非常有用。例如,在某些情况下,当优化需要很长时间时,优化可能不值得。传递null以关闭超时。
  • output_filepath_pattern (默认: %basename%/%filename%%ext%) - 存储优化文件的路径。默认情况下,它将覆盖原始文件。有3个占位符:%basename%%filename%(没有扩展名和点)和%ext%(带有点的扩展名),它们将被替换为原始文件中的值。
  • execute_only_first_png_optimizer (默认: true) - 执行第一个成功或所有png优化器
  • execute_only_first_jpeg_optimizer (默认: true) - 执行第一个成功或所有jpeg优化器
  • optipng_options (默认: array('-i0', '-o2', '-quiet')) - 传递给库的参数数组
  • pngquant_options (默认: array('--force'))
  • pngcrush_options (默认: array('-reduce', '-q', '-ow'))
  • pngout_options (默认: array('-s3', '-q', '-y'))
  • advpng_options (默认: array('-z', '-4', '-q'))
  • gifsicle_options (默认: array('-b', '-O5'))
  • jpegoptim_options (默认: array('--strip-all', '--all-progressive'))
  • jpegtran_options (默认: array('-optimize', '-progressive'))
  • svgo_options (默认: array('--disable=cleanupIDs'))
  • custom_optimizers (默认 array())
  • optipng_bin (默认: 将自动猜测) - 您可以强制指定二进制文件路径,但默认情况下将自动猜测
  • pngquant_bin
  • pngcrush_bin
  • pngout_bin
  • advpng_bin
  • gifsicle_bin
  • jpegoptim_bin
  • jpegtran_bin
  • svgo_bin

您可以将选项数组作为ImageOptimizer\OptimizerFactory构造函数的第一个参数传递。第二个参数是可选的Psr\LoggerInterface

$factory = new webllc\ImageOptimizer\OptimizerFactory(array('ignore_errors' => false), $logger);

支持的优化器

  • 默认(smart)- 它猜测文件类型并选择此文件类型的优化器
  • png - png文件的优化器链,默认使用pngquantoptipngpngquant是损失优化
  • jpg - 执行两种优化中的第一种:jpegtranjpegoptim
  • gif - gifsicle的别名
  • pngquant - 主页
  • optipng - 主页
  • pngcrush - 主页
  • pngout - 主页
  • advpng - 主页
  • jpegtran - 主页
  • jpegoptim - 主页
  • gifsicle - 主页
  • svgo - 主页

您可以通过将优化器的名称传递给webllc\ImageOptimizer\OptimizerFactory::get方法来获取具体的优化器

//default optimizer is `smart`
$optimizer = $factory->get();

//png optimizer
$pngOptimizer = $factory->get('png');

//jpegoptim optimizer etc.
$jpgOptimizer = $factory->get('jpegoptim');

自定义优化器

您可以轻松定义自定义优化器

$factory = new webllc\ImageOptimizer\OptimizerFactory(array('custom_optimizers' => array(
    'some_optimizier' => array(
        'command' => 'some_command',
        'args' => array('-some-flag')
    )
)), $logger);

然后使用

$customOptimizer = $factory->get('some_optimizier');

我得到了"所有优化器都未能优化文件"

可能您没有安装所需的优化器。让我们看看Vagrantfile文件,以查看如何安装这些命令的示例。

为了查看所有中间错误,您可以使用日志记录器(默认情况下使用NullLogger,因此日志不可用)

class StdoutLogger extends \Psr\Log\AbstractLogger { 
    public function log($level, $message, array $context = array()) { 
        echo $message."\n"; 
    }
}

$factory = new webllc\ImageOptimizer\OptimizerFactory(array(), new StdoutLogger());

$factory->get()->optimize('yourfile.jpg');

// and have a look at stdout

许可证

MIT