techart/image-service

图像处理库提供商

1.1.1 2024-04-10 05:44 UTC

This package is auto-updated.

Last update: 2024-09-10 06:47:05 UTC


README

该服务是一个用于处理、保存、获取和删除图片的适配器。

默认包含2个图像管理器

  • InterventionImageManager,与intervention/image库一起工作,支持imagickgd驱动程序
  • GumletImageResizeManager,与gumlet/php-image-resize库一起工作,仅支持gd驱动程序

管理器是库的适配器类,要编写自己的管理器,需要实现ImageManagerContract接口

还有2个文件系统操作类StandardStorageLaravelStorage(用于laravel项目),如果需要,可以编写自己的,但请记住实现StorageContract接口

实现StorageContract的类表示文件系统管理,这是创建目录、获取文件路径等所需的内容

功能

  • 将图像转换为不同格式,取决于所选的管理器。
  • 更改图像大小,方法也取决于所选的管理器。
  • 删除创建的图像

如何使用

要使用,需要选择管理器类和文件系统操作类,设置配置数组,并获取ImageService类的实例。

配置

配置是一个数组,限制服务在可用方法、大小、质量和格式方面的操作。

可以有以下键:'resize' | 'format' | 'method' | 'quality'

quality不是必需的

resize可以是包含可用大小的数组,例如

[
    '200x200',
    '200x0',
    '0x200',
    '1200x369'
]

也可以是包含*的字符串,这将移除对可用大小的限制

交互主要对象

对象\Techart\ImageService\Service

主要控制类,提供对图像更改对象和已创建图像的操作。

$manager = new \Techart\ImageService\Managers\InterventionImageManager();
$storage = \Techart\ImageService\Storages\StandardStorage::getInstance();
$config = [
    'sizes' => '*',
    'format' => [
        'webp',
        'jpg',
        'jpeg',
        'png',
        'gif',
    ],
    'methods' => [
        'resize',
        'crop',
        'fit',
    ]
];

$service = \Techart\ImageService\Service::getInstance($manager, $storage, $config);

对象\Techart\ImageService\Storage

表示用于获取和删除创建的图像的类。

该类返回\Techart\ImageService\Service对象的storage方法。需要在方法中传入原始图像的相对路径

该类有以下方法

  • haveModifyImages - 返回truefalse,取决于是否有修改后的原始图像副本
  • getOriginalImage - 返回包含所有修改后的原始图像副本路径的数组
  • delete - 删除所有修改后的原始图像副本和原始图像。为了不删除原始图像,在调用方法时将false作为参数传递

对象\Techart\ImageService\Processor

表示通过它执行图像操作,也可以通过它设置操作参数。

该类返回\Techart\ImageService\Service对象的modify方法。

在调用方法后执行操作,该方法将返回\Techart\ImageService\Paths类的实例,它提供对原始和新的图像信息和路径的访问。

对象\Techart\ImageService\Paths

\Techart\ImageService\Processor对象方法的结果。有以下方法

  • getInfo - 返回包含图像数据的数组,具有以下结构
    [
        'dirname' => 'Директория картинки',
        'basename' => 'Имя картинки вместе с раширением',
        'extension' => 'Расширение картинки',
        'filename' => 'Имя картинки',
        'real_path' => 'Абсолютный путь картинки',
        'path' => 'Относительный путь картинки',
        'mime' => 'Расширение картинки в формате mime',
        'url' => 'URL по которому картинка будет доступена',
        'size' => [
            'w' => Ширина картинки,
            'h' => Высота картинки,
            'string' => Строка вида width="{Ширина}" height="{Высота}",
        ],
    ]
  • getUrl - 返回图片可访问的URL
  • getPath - 返回图片的绝对路径

同样也存在针对原始图像的类似方法,例如,getOriginalUrl

直接操作图像的示例

操作示例

注意,原始图片的路径应该是相对路径

图片修改

示例,其中使用类 \Techart\ImageService\Processor 的方法设置处理参数

    $imageUrl = $service->modify('путь до оригинальной картинки')
        ->setQuality(95)
        ->setSizes('800x600')
        ->setFormat('webp')
        ->setMethod('fit')
        ->process()
        ->getUrl()

示例,其中通过数组传递处理参数,具有以下键

  • resize - 调整大小
  • quality - 质量
  • format - 格式
  • method - 方法,默认为 resize
$imageUrl = $service->modify('путь до оригинальной картинки', [
    'resize' => '400x0',
    'format' => 'webp',
    'quality' => 80,
    'method' => 'fit'
])->process()->getUrl()

示例,其中通过字符串传递处理参数

  • /r - 调整大小
  • /q - 质量
  • /f - 格式
  • /m - 方法,默认 resize(适用于90%的情况)
$imageUrl = $service->setup('путь до оригинальной картинки', '/r/640x480/r/f/webp/f/q/80/q/m/fit/m')
    ->process()
    ->getUrl();

删除图像

请记住,如果需要(例如,删除数据库中的记录或更新图片等),请删除图像

为此,有一个对象 \Techart\ImageService\Storage 和它的方法 delete(),它删除与原始图像相关的所有图像(包括原始图像)。

如果要保留原始图像,请将第一个参数传递为 false

示例

$originalImage = 'путь до оригинальной картинки';

$storage = $service->storage($originalImage);

if ($storage->haveModifyImages()) {
    $storage->delete(false);
}