flynsarmy/image-optimizer
Composer 安装命令:
composer require flynsarmy/image-optimizer
包简介
Image optimization / compression library. This library is able to optimize png, jpg and gif files in very easy and handy way. It uses optipng, pngquant, pngcrush, pngout, gifsicle, jpegoptim and jpegtran tools.
README 文档
README
Fork of ps/image-optimizer with many improvements. See Changelog for details.
This library is handy and very easy to use optimizer for image files. It uses optipng, pngquant, jpegoptim, svgo and few more libraries, so before use it you should install proper libraries on your server. Project contains Vagrantfile that defines testing virtual machine with all libraries installed, so you can check Vagrantfile how to install all those stuff.
Thanks to ImageOptimizer and libraries that it uses, your image files can be 10%-70% smaller.
Installation
Using composer:
composer require flynsarmy/image-optimizer
Basic usage
$factory = new \ImageOptimizer\OptimizerFactory(); $optimizer = $factory->get(); $filepath = /* path to image */; $optimizer->optimize($filepath); //optimized file overwrites original one
Configuration
By default optimizer does not throw any exception, if file can not be optimized or optimizing library for given file is
not installed, optimizer will not touch original file. This behaviour is ok when you want to eventually optimize files
uploaded by user. When in your use case optimization fault should cause exception, ignore_errors option was created
especially for you.
This library is very smart, you do not have to configure paths to all binaries of libraries that are used by ImageOptimizer, library will be looking for those binaries in few places, so if binaries are placed in standard places, it will be found automatically.
Supported options:
ignore_errors(default: true)single_optimizer_timeout_in_seconds(default: 60) - useful when you want to have control how long optimizing lasts. For example in some cases optimizing may not be worth when it takes big amount of time. Passnullin order to turn off timeout.output_filepath_pattern(default:%basename%/%filename%%ext%) - destination where optimized file will be stored. By default it overrides original file. There are 3 placehoders:%basename%,%filename%(without extension and dot) and%ext%(extension with dot) which will be replaced by values from original file.execute_only_first_png_optimizer(default: true) - execute the first successful or allpngoptimizersexecute_only_first_jpeg_optimizer(default: true) - execute the first successful or alljpegoptimizersoptipng_options(default:array('-i0', '-o2', '-quiet')) - an array of arguments to pass to the librarypngquant_options(default:array('--force'))pngcrush_options(default:array('-reduce', '-q', '-ow'))pngout_options(default:array('-s3', '-q', '-y'))advpng_options(default:array('-z', '-4', '-q'))gifsicle_options(default:array('-b', '-O5'))jpegoptim_options(default:array('--strip-all', '--all-progressive'))jpegtran_options(default:array('-optimize', '-progressive'))svgo_options(default:array('--disable=cleanupIDs'))custom_optimizers(defaultarray())optipng_bin(default: will be guessed) - you can enforce paths to binaries, but by default it will be guessedpngquant_binpngcrush_binpngout_binadvpng_bingifsicle_binjpegoptim_binjpegtran_binsvgo_bin
You can pass array of options as first argument of ImageOptimizer\OptimizerFactory constructor. Second argument is
optionally Psr\LoggerInterface.
$factory = new \ImageOptimizer\OptimizerFactory(array('ignore_errors' => false), $logger);
Supported optimizers
- default (
smart) - it guess file type and choose optimizer for this file type png- chain of optimizers for png files, by default it usespngquantandoptipng.pngquantis lossy optimizationjpg- first of two optimizations will be executed:jpegtranorjpegoptimgif- alias togifsiclepngquant- homepageoptipng- homepagepngcrush- homepagepngout- homepageadvpng- homepagejpegtran- homepagejpegoptim- homepagegifsicle- homepagesvgo- homepage
You can obtain concrete optimizer by passing his name to ImageOptimizer\OptimizerFactory::get method:
//default optimizer is `smart` $optimizer = $factory->get(); //png optimizer $pngOptimizer = $factory->get('png'); //jpegoptim optimizer etc. $jpgOptimizer = $factory->get('jpegoptim');
Custom optimizers
You can easily define custom optimizers:
$factory = new \ImageOptimizer\OptimizerFactory(array('custom_optimizers' => array( 'some_optimizier' => array( 'command' => 'some_command', 'args' => array('-some-flag') ) )), $logger);
And then usage:
$customOptimizer = $factory->get('some_optimizier');
Checking which optimizers are installed on your system
The following code will run a which on each executeable to determine if they are installed on your system and return a list of true/false results.
$factory = new \ImageOptimizer\OptimizerFactory(); print_r($factory->checkOptimizers());
I got "All optimizers failed to optimize the file"
Probably you don't have required optimazers installed. Let's have a look
at Vagrantfile file in order to see an example how to install those
commands.
In order to see all intermediate errors, you can use logger (be default
NullLogger is used, so logs are not available):
class StdoutLogger extends \Psr\Log\AbstractLogger { public function log($level, $message, array $context = array()) { echo $message."\n"; } } $factory = new \ImageOptimizer\OptimizerFactory(array(), new StdoutLogger()); $factory->get()->optimize('yourfile.jpg'); // and have a look at stdout
License
MIT
flynsarmy/image-optimizer 适用场景与选型建议
flynsarmy/image-optimizer 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 54.4k 次下载、GitHub Stars 达 3, 最近一次更新时间为 2022 年 03 月 12 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「image」 「compression」 「optipng」 「optimization」 「image optimizer」 「jpegoptim」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 flynsarmy/image-optimizer 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 flynsarmy/image-optimizer 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 flynsarmy/image-optimizer 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Asset Management for PHP
Yii2 LightBox image galary widget uses Lightbox v2.10.0 by Lokesh Dhakar
The Yii2 extension uses jQuery jquery.carousel-1.1.min.js and makes image carousel from php array of structure defined.
A PHP command line tool for converting SVG images to a set of CSS icons (SVG & PNG, single icons and / or CSS sprites) with support for image optimization and Sass output
Laravel wrapper for https://github.com/despark/image-purify
Easily optimize images using WP CLI
统计信息
- 总下载量: 54.4k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 3
- 点击次数: 9
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2022-03-12