webllc / image-optimizer
图像优化/压缩库。这个库能够非常方便地优化png、jpg和gif文件。它使用了optipng、pngquant、pngcrush、pngout、gifsicle、jpegoptim和jpegtran工具。
Requires
- php: ^7.1
- psr/log: ^1.0
- symfony/options-resolver: ~3.3 | ~4.0 | ~5.0
- symfony/process: ~3.3 | ~4.0 | ~5.0
Requires (Dev)
- ext-gd: *
- phpunit/phpunit: ^7.0
This package is auto-updated.
Last update: 2024-09-15 02:12:59 UTC
README
这是一个非常方便且易于使用的图像文件优化器。它使用了optipng、pngquant、jpegoptim、svgo等库,因此在使用之前,您应该在服务器上安装适当的库。项目包含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文件的优化器链,默认使用pngquant
和optipng
。pngquant
是损失优化jpg
- 执行两种优化中的第一种:jpegtran
或jpegoptim
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