forgetphp/image-compression
Composer 安装命令:
composer require forgetphp/image-compression
包简介
An image compression library
README 文档
README
PHP JPEG Encoder Project
该项目是基于 libwebp , mozjpeg 实现的。PHP的 gd 库,或者是 imagick 压缩比、性能都不如前者。
如果需要转化成异步模式则需要 Swoole 提供的 Hook 功能将命令转为 CLI 模式。
运行环境
- Linux,OS X
- PHP 7.2+
- Swoole 4.4+
安装
compser require forgetphp/image-compression
使用
<?php use Image\Compression\Type; use Image\Contract\FinishInterface; use Image\Contract\ReportEncodingProgressInterface; use Image\Event\Finish; use Image\Event\ReportEncodingProgress; use Image\ImageFactory; use Image\Listener\FinishListener; use Image\Listener\ReportEncodingProgressListener; //监听压缩进度事件(如果需要) class ReportListener extends ReportEncodingProgressListener { /** * @param ReportEncodingProgress| object $event */ public function process( object $event ) { //压缩进度 //$event->progress; //当前文件名 //$event->currentFile; } } //监听压缩完成事件(如果需要) class CompressionFinishListener extends FinishListener { /** * @param Finish| object $event */ public function process( object $event ) { $event->currentFile;//当前文件名 $event->compressionRatio;//压缩比 $event->distImageSize;//压缩后文件大小 $event->distPath;//压缩后文件路径 $event->originImageSize;//原图大小 } } $config = [ 'type' => Type::CJPEG , //压缩类型 'output_dir' => './runtime', //文件输出路径 //'bin' => '',//对应bin的路径。默认不用填写。如果在本地无法正常运行。请编译对应平台的可执行文件后配置该项 'listener' => [ //ReportEncodingProgressInterface::class => ReportListener::class , //压缩进度事件 //FinishInterface::class => CompressionFinishListener::class ,//压缩完成事件 ] , ]; $image = ImageFactory::create($config);
方法
setQuality(int) 设置压缩质量。0-95 默认75
$image->setQuality(75);
enableAsync() 是否开启异步。依赖 Swoole 提供的 Hook 功能
$image->enableAsync();
input(string $image,string $outfile = '') 输入一张图片。第二个参数为输出图片名称,不需要带后缀,不传则使用原名。也可以输入网络图片地址。
$image->input('demo.jpg');
inputs(array $images) 输入图片数组。参数说明参考 input()
$image->inputs([ 'https://wenda.swoole.com/storage/avatar/avatar-1.png', 'WechatIMG409.jpeg' ]); //or $image->inputs([ [ 'WechatIMG409.jpeg' , 'outfilename'], ['https://wenda.swoole.com/storage/avatar/avatar-1.png','输出文件名。不需要带后缀。可不传同 input()' ], ]);
crop( int $x , int $y , int $width , int $height ) 图片裁切。 x 轴位置 ,y 轴位置 , width 图片宽度 ,height 图片高度
$image->->crop(100,100,100,100);
resize( int $width , int $height ) 图片缩放( mozjpeg 不支持), width 图片宽度 ,height 图片高度
$image->->resize(10,10);
output() 输出图片
$result = $image->->output();
例子
$result = ImageFactory::create($config) ->input( 'demo.jpg' ) ->output( );
效果对比
此对比只是针对同一图片而言。不同的图片压缩比会有差异。只能是做一个相对的对比。
| 原图 | Webp | mozjpeg | imagick(jpg) | imagick(webp) |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
| 压缩比 | 85% | 83% | 52% | 72% |
兼容
License
MIT
forgetphp/image-compression 适用场景与选型建议
forgetphp/image-compression 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 15 次下载、GitHub Stars 达 1, 最近一次更新时间为 2021 年 01 月 04 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「php」 「image」 「Webp」 「libwebp」 「image compression」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 forgetphp/image-compression 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 forgetphp/image-compression 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 forgetphp/image-compression 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Replace image URLs found in HTML
Webp converter scenarios
Yii2 LightBox image galary widget uses Lightbox v2.10.0 by Lokesh Dhakar
Generate responsive Wordpress images. Supports .webp, lazyload, bootstrap.
The Yii2 extension uses jQuery jquery.carousel-1.1.min.js and makes image carousel from php array of structure defined.
Image optimization widget for Yii2 Framework with auto WebP/AVIF image format generation from PNG/JPG files.
统计信息
- 总下载量: 15
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2021-01-04




