ripaclub / imgman
一个库,用于创建、修改、处理和存储来自任何协议的图像
Requires
- php: >=5.5.0
- zendframework/zend-http: ~2.3
- zendframework/zend-servicemanager: ~2.3
- zendframework/zend-stdlib: ~2.3
Requires (Dev)
- aws/aws-sdk-php: ~3.17.6
- phpunit/phpunit: ~4.2
- satooshi/php-coveralls: dev-master
- zendframework/zend-mvc: ~2.3
README
ImgMan 是一个库,允许您从任何PHP支持的URL样式协议中创建各种图像版本。
您可以修改图像(例如,调整大小、裁剪、格式、内嵌、外嵌、旋转)并将不同的版本存储在您的配置中。
需求
-
PHP >= 5.5
-
Composer
-
Imagick(目前唯一支持的用于处理图像的适配器)
特性
ImgMan 具有多种特性
-
核心
包含执行图像操作引擎。目前只存在一个适配器:
ImageMagick
。 -
操作
包含一个类
HelperPluginManager
,它是一个AbstractPluginManager
,其中配置所有可以附加到版本的操作(即Compression
、Crop
、FitIn
、FitOut
、Format
、Resize
、Rotate
、ScaleToHeight
、ScaleToWidth
) -
存储
ImgMan 允许您通过
StorageInterface
对象(例如FileSystem
、Mongo
)将图像保存到多个持久层。 -
图像
包含用于图像的类
-
服务
一系列旨在实例化 ImgMan 服务的类。使用此服务,您可以将图像保存为在服务中配置的所有版本(
grab
函数)。您还可以保存、更新和删除特定版本的图像
安装
在 php 扩展中安装 ImageImagick
(版本 > 3.1.2)。
将 ripaclub/imgman
添加到您的 composer.json
文件中。
{
"require": {
"ripaclub/imgman": "0.5.*"
}
}
配置
使用服务工厂(存储和服务的工厂)、插件管理器和 imagick 适配器配置服务管理器。
return [ \\ ... 'abstract_factories' => [ // Load abstract service 'ImgMan\Service\ImageServiceAbstractFactory', // Load abstract factory for mongo storage 'ImgMan\Storage\Adapter\Mongo\MongoDbAbstractServiceFactory', 'ImgMan\Storage\Adapter\Mongo\MongoAdapterAbstractServiceFactory', // Load abstract factory to FileSystem storage 'ImgMan\Storage\Adapter\FileSystem\FileSystemAbstractServiceFactory' // Load abstract factory to aws storage previus import of aws/aws-sdk-php 3.17.6 'ImgMan\Storage\Adapter\Cdn\Amazon\S3\S3ServiceAbstractFactory', 'ImgMan\Storage\Adapter\Cdn\Amazon\CloudFront\CloudFrontServiceAbstractFactory', 'ImgMan\Storage\Adapter\Cdn\AmazonAdapterAbstractFactory', ], 'factories' => [ // Load (operation) helper plugin manager 'ImgMan\Operation\HelperPluginManager' => 'ImgMan\Operation\HelperPluginManagerFactory', ], 'invokables' => [ // Load adapter 'ImgMan\Adapter\Imagick' => 'ImgMan\Core\Adapter\ImagickAdapter', 'ImgMan\ResolverDefault' => 'ImgMan\Storage\Adapter\FileSystem\Resolver\ResolverDefault' ], \\ ... ];
您只能设置一个存储配置。配置存储(例如 Mongo),以保存图像的位置
return [ \\ ... 'imgman_mongodb' => [ 'MongoDb' => [ 'database' => 'imgManStorage' ] ], 'imgman_adapter_mongo' => [ 'Storage' => [ 'collection' => 'image_test', 'database' => 'MongoDb' ] ], \\ ... ];
例如,AWS 配置
return [ \\ ... 'imgman_amazon_client' => [ 'AmazonS3Client' => [ 'secret' => 'testSecret', 'key' => 'testKey', 'region' => 'testRegion', 'version' => 'latest', 'name' => 'S3' ], 'AmazonCloudFrontClient' => [ 'secret' => 'testSecret', 'key' => 'testKey', 'region' => 'testRegion', 'version' => 'latest', 'name' => 'CloudFront' ] ], 'imgman_amazon_s3_service' => [ 'S3Service' => [ 'client' => 'AmazonS3Client', 'bucket' => 'test' ] ], 'imgman_amazon_cloud_front_service' => [ 'CloudFrontService' => [ 'client' => 'AmazonCloudFrontClient', 'domain' => 'testdomain' ] ], 'imgman_amazon_adapter' => [ 'Storage' => [ 's3_client' => 'S3Service', 'cloud_front_client' => 'CloudFrontService', 'name_strategy' => 'default', 'name_strategy_config' => [ 'prefix' => 'test' ] ] ] \\ ... ];
例如,文件系统配置
return [ \\ ... 'imgman_adapter_filesystem' => [ 'Storage' => [ 'path' => DIR_PATH_, 'resolver' => 'ImgMan\ResolverDefault' ], ] \\ ... ];
使用存储、助手、适配器和附加到版本的各个操作配置 ImgMan 服务
return [ \\ ... 'imgman_services' => [ 'ImgMan\Service\First' => [ 'adapter' => 'ImgMan\Adapter\Imagick', 'storage' => 'Storage', 'helper_manager' => 'ImgMan\Operation\HelperPluginManager', 'renditions' => [ 'thumb' => [ 'resize' => [ 'width' => 200, 'height' => 200, ], 'compression' => [ 'compression' => 90, 'compressionQuality' => 70, ] ], 'thumbmaxi' => [ 'resize' => [ 'width' => 400, 'height' => 400, ], ], ], ], ], \\ ... ];
用法
现在我们获取 IgmMan 服务,从文件流(文件系统)加载一张图片,并将其保存为 3 个版本(原始、缩略图和缩略图最大版)。
$imgMan = $this->getServiceLocator()->get('ImgMan\Service\First'); $image = new ImgMan\Image\Image(__DIR__. '/../../../name_image.png'); //the path can be also a URL $imgMan->grab($image, '/first/name/identifier/');
最后,我们可以以这种方式恢复我们想要的图像版本
$imageOriginal = $imgMan->get('/first/name/identifier/', 'original'); $imageThumb = $imgMan->get('/first/name/identifier/', 'thumb'); $imageThumbMaxi = $imgMan->get('/first/name/identifier/', 'thumbmaxi');