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');