rkcreative / aws-image-handler
一个用于从 AWS Serverless Image Handler CloudFormation Stack 生成图像 URL 的 Laravel 扩展包。
Requires
- guzzlehttp/guzzle: ^6.0 || ^7.0
- illuminate/support: ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0
Requires (Dev)
- orchestra/testbench: ^3.5 || ^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0
- phpunit/phpunit: ^7.0 || ^8.0 || ^9.0 || ^10.0 || ^11.0
README
本扩展包为 AWS Serverless Image Handler 服务提供了一个 Laravel 包装器。
要求
- PHP >= 7.3
- Laravel >= 5.0
- 已安装 Image Handler 服务的 AWS 账户
安装
您可以通过 composer 安装此扩展包
composer require rkcreative/aws-image-handler
安装扩展包后,由于 Laravel 的包发现功能,将自动注册 AwsImageHandlerServiceProvider
和 ImageHandler
门面。
如果您使用的是 Laravel 5.5 或更高版本,无需进一步操作。您可以直接开始使用 ImageHandler
门面。
use Rkcreative\AwsImageHandler\Facades\ImageHandler; $url = ImageHandler::resize(200, 200)->createUrl('path/to/image.jpg');
如果您使用的是低于 5.5 版本的 Laravel,您需要手动注册服务提供者和门面。在您的 config/app.php
文件中的 providers
和 aliases
数组中添加以下行
'providers' => [ // Other service providers... Rkcreative\AwsImageHandler\AwsImageHandlerServiceProvider::class, ], 'aliases' => [ // Other aliases... 'ImageHandler' => Rkcreative\AwsImageHandler\Facades\ImageHandler::class, ],
配置
安装扩展包后,您应该发布配置文件
php artisan vendor:publish --provider="Rkcreative\AwsImageHandler\AwsImageHandlerServiceProvider" --tag="config"
此命令将在您的 config
目录中创建一个 aws-image-handler.php
配置文件。在此文件中,您可以设置您的分发 URL 和默认的 S3 存储桶。
return [ 'distributionUrl' => env('AWS_IMAGE_HANDLER_URL', 'default-url'), 'defaultBucket' => env('AWS_IMAGE_HANDLER_S3_BUCKET', 'default-bucket'), ];
您还应该在 .env
文件中添加 AWS_IMAGE_HANDLER_URL
和 AWS_IMAGE_HANDLER_S3_BUCKET
变量。
AWS_IMAGE_HANDLER_URL=your-distribution-url
AWS_IMAGE_HANDLER_S3_BUCKET=your-default-bucket
用法
以下是如何使用 ImageHandler
类的详细示例
use Rkcreative\AwsImageHandler\Services\ImageHandler; $imageHandler = new ImageHandler(); $imageHandler->resize(200, 200); // Generate the URL for the transformed image $url = $imageHandler->createUrl('path/to/image.jpg');
在此示例中,使用 resize
宏设置所需的图像尺寸,然后使用 createUrl
方法生成转换后图像的 URL。生成的 URL 将类似于以下格式:
https://your-cloudfront-url.com/eyJidWNrZXQiOiJidWNrZXQiLCJrZXkiOiJwYXRoL3RvL2ltYWdlLmpwZyIsImVkaXRzIjp7InJlc2l6ZSI6eyJ3aWR0aCI6MjAwLCJoZWlnaHQiOjIwMH19fQ==
在此 URL 中,your-cloudfront-url.com
是您的 CloudFront 分发 URL,而长的 base64 字符串是编码的编辑选项。
使用别名
此扩展包还提供了一个别名,您可以使用它来更轻松地访问。以下是一个示例:
use ImageHandler; $url = ImageHandler::resize(200, 200)->createUrl('path/to/image.jpg');
在此示例中,ImageHandler::resize(200, 200)
等同于 (new Rkcreative\AwsImageHandler\Services\ImageHandler())->resize(200, 200)
。您可以在 Laravel 应用程序的任何地方使用此别名。
可用的宏
ImageHandler
类包含以下宏:
smartCrop
roundCrop
contentModeration
crop
quality
resize
setRgba
rotate
您可以使用这些宏就像使用 ImageHandler
类上的任何其他方法一样。
$imageHandler = new ImageHandler(); $imageHandler->smartCrop($options); $imageHandler->roundCrop($options); // etc.
扩展自定义宏
您可以使用自己的宏扩展 ImageHandler
类。选项来自 Sharp Node.js 图像处理库。以下是这样做的方法:
- 创建一个新的服务提供者
php artisan make:provider ImageHandlerMacroServiceProvider
- 在您的新服务提供者的
boot
方法中添加您的宏
namespace App\Providers; use Illuminate\Support\ServiceProvider; use Rkcreative\AwsImageHandler\Services\ImageHandler; class ImageHandlerMacroServiceProvider extends ServiceProvider { public function boot() { // Sample blur image operation from the Sharp node.js image library to show how you could add it as a custom option. ImageHandler::macro('blur', function ($blur) { if ($blur < 0.3 || $blur > 1000) { throw new \InvalidArgumentException('Invalid blur value. It must be = a sigma value between 0.3 and 1000.'); } $this->options['blur'] = $blur; return $this; }); } }
在此示例中,blur
宏接收一个 blur
值作为参数。然后,将 blur
值添加到图像处理选项中。该宏修改了 ImageHandler
实例的状态,然后返回该实例本身,允许进行方法链式调用。
- 在
config/app.php
中的providers
数组中注册您的新服务提供者
'providers' => [ // Other service providers... App\Providers\ImageHandlerMacroServiceProvider::class, ],
现在,您可以使用您的宏就像使用 ImageHandler
类上的任何其他方法一样。
$imageHandler = new ImageHandler(); $imageHandler->blur(3)->createUrl('path/to/image.jpg');
在此示例中,使用 blur
宏为图像添加模糊效果。模糊值可以是介于 0.3(低模糊)和 1000(最大模糊)之间的任何数字。
贡献
欢迎贡献。我们通过 Github 的拉取请求接受贡献。
错误报告
如果您发现了错误,请在Github上创建一个问题描述问题,并尽可能提供更多信息。截图、错误信息和复现问题的示例代码都非常有帮助。
拉取请求
- 记录任何行为变化 - 确保将
README.md
和其他相关文档保持最新。 - 创建主题分支 - 不要要求我们从您的master分支中拉取。
- 每个拉取请求一个特性 - 如果您想做不止一件事,请发送多个拉取请求。
- 提供连贯的历史记录 - 确保您拉取请求中的每个单独提交都有意义。如果在开发过程中需要制作多个中间提交,请在提交前将它们压缩。
- 为您的特性编写测试 - 这有助于我们确保一切按预期工作,并防止在添加新更改时出现回归。
要运行测试,请使用以下命令
vendor/bin/phpunit
快乐编码!
许可
MIT许可证(MIT)。请参阅许可文件获取更多信息。