glaivepro/image

为 Laravel 提供通过 URL 进行图片处理

1.2.0 2024-05-10 13:37 UTC

This package is auto-updated.

Last update: 2024-09-10 14:22:38 UTC


README

为 Laravel 提供通过 URL 进行图片处理。它提供了一个 URL 接口,而实际的图片处理则由 Intervention 完成。

处理后的文件存储在请求的 URL 中,因此处理不会重复进行,但文件将由您的 web 服务器直接提供。

此包深受 folklore/image 的启发。

安装

composer require glaivepro/image

目前此包不发布任何配置,但处理是通过 intervention 完成的。如果您需要将驱动程序更改为 imagick,您应该 配置 intervention

使用方法

让我们考虑一个公开可访问的图片,其 URL 为 example.com/img/some.jpg

此包将允许您通过 URL example.com/img/some-image(120x150).jpg 获取该文件的缩小和裁剪版本。处理后的图片将存储在 img 目录中,文件名为 some-image(120x150).jpg,以便下一次对 example.com/img/some-image(120x150).jpg 的请求将由您的 web 服务器处理,提供存储的文件。

如果您想要缩小但保持宽高比,则可以跳过一个维度

  • example.com/img/some-image(200x_).jpg — 约束宽度
  • example.com/img/some-image(_x90).jpg — 约束高度

还有其他一些处理方法可用

  • example.com/img/some-image(blur).jpg
  • example.com/img/some-image(blur(10)).jpg
  • example.com/img/some-image(pixelate(12)).jpg
  • example.com/img/some-image(resize(120,140)).jpg — 不裁剪的缩放
  • example.com/img/some-image(100x200-pixelate(10)).jpg
  • example.com/img/some-image(resize(120,140)-blur-pixelate(12)).jpg

生成 URL

可以通过我们的外观生成简单的(尺寸约束)URI

$uri = GPImage::url('img/some-image.jpg', 120, 150);
// $uri is 'img/some-image-image(120x150).jpg'

注意 方法命名为 url 以与 folklore/image 兼容。尽管这并不是作为一个即插即用的替代品,但如果您将 Image 外观别名重新定义为指向 GlaivePro\Image\GPImage,则此情况将如此。

可以通过 asset 方法生成完整 URL

$url = GPImage::asset('img/some-image.jpg', 120, 150);
// $url is 'https://example.com/img/some-image-image(120x150).jpg'

可以使用可字符串化的 Uri 类生成更复杂的 URI

use GlaivePro\Image\Uri;

$uri = new Uri('pic.jpg');
$uri->size(20, 400);

(string) $uri; // 'pic-image(20x400).jpg'

Uri 的实例也可以通过 GPImage 外观的 urlasset 方法生成

GPImage::asset('pic.jpg')->pixelate(12)->blur(10)->resize(100, 200);
// https://example.com/pic-image(pixelate(12)-blur(10)-resize(100,200)).jpg

自定义过滤器

您可以注册自己的过滤器,这些过滤器将接收 intervention 实例和任何您可以根据需要处理的参数。

// Called via 'somepic-image(simplefilter).jpg'
GPImage::filter('simplefilter', fn ($image) => $image->anyInterventionMethod());

// Called via 'somepic-image(complexfilter(10,20))'
GPImage::filter('complexfilter', function($image, $arg1, $arg2) {
	$tempArg = $arg1 * 2;
	$image->someInterventionMethod($tempArg, $arg1);
	$image->someOtherInterventionMethod();
});