techart / image-service
图像处理库提供商
Requires
- php: ^8.2
- gumlet/php-image-resize: ^2.0
- illuminate/contracts: >=8
- illuminate/support: >=8
- intervention/image: ^2.7
Requires (Dev)
- ext-exif: *
- phpunit/phpunit: ^10
- symfony/var-dumper: ^7.0
README
该服务是一个用于处理、保存、获取和删除图片的适配器。
默认包含2个图像管理器
InterventionImageManager
,与intervention/image
库一起工作,支持imagick
和gd
驱动程序GumletImageResizeManager
,与gumlet/php-image-resize
库一起工作,仅支持gd
驱动程序
管理器是库的适配器类,要编写自己的管理器,需要实现ImageManagerContract
接口
还有2个文件系统操作类StandardStorage
和LaravelStorage
(用于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
- 返回true
或false
,取决于是否有修改后的原始图像副本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
- 返回图片可访问的URLgetPath
- 返回图片的绝对路径
同样也存在针对原始图像的类似方法,例如,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); }