jmoguelruiz/yii2-resource-image

该包的最新版本(1.0.1)没有提供许可信息。

1.0.1 2017-01-26 00:41 UTC

This package is not auto-updated.

Last update: 2024-09-29 01:19:07 UTC


README

欢迎使用 yii2-resource-image wiki!

这是一个yii2组件,用于管理在服务器上上传的图像以及生成路径,操作最简单。

覆盖

我认为URL路径由五部分组成:根目录,基础路径,资源,大小,名称。例如

所有组合在一起就是 http://project-template.dev/images/dev/player/thumb/image_1485386176.jpg

因此,我构建了这个组件,以配置每一部分并生成最简单的URL,我包含了帮助你管理图像文件的功能。

每个部分都有自己的配置。

根目录

这部分是URL的根目录,以下代码是默认配置

[
  'isWebUrl' => true
]

isWebUrl 为true时,生成 http://project-template.dev/ 否则为 /Users/josemoguel/Documents/fuentes/project-template/frontend/web

基础路径

这部分根据您运行的环境自动配置。

[
 'enviroment' => $this->getEnviromentRunning()
]

如果您想设置环境,有三个默认环境 dev,test,prod

资源

属于图像的资源,如player、user、gamer等。

[
    'type' => '',
    'isTemp' => false
]

isTemp 为true时,将前缀 _temp 添加到资源中,或者如果您已配置 player_temp,将 isTemp = true 用于处理图像,然后保存到实际目录。

大小

您可以为图像保存多个大小。

[
  'type' => self::SIZE_ORIGINAL
]

名称

您可以为图像分配名称。

[
   'title' => '', 
   'ext' => '', 
   'concatTime' => true
]

如果您设置 concatTime = true,则将时间连接到图像名称中,以解决缓存问题。 image_1485386176.jpg

安装

首选方法是composer

composer install jmoguelruiz/yii2-resource-image

或者添加到您的composer文件中。

"jmoguelruiz/yii2-resource-image": "1.0.*"

在config/main中的component部分放入以下代码

[
   'components' => [
      'resourceImage' => [
                'class' => 'common\components\ResourceImage',
                // Optional Configs
                'modelClasses' => [ // Custom models.
                    'ResourcePath' => 'common\components\ResourcePath'
                ],
                'basePaths' => [ // Base paths of your project in each enviroment.
                    'prod' => 'images/',
                    'test' => 'images/test',
                    'dev' => 'images/dev'
                ],
                'serverType' => ResourceImage::SERVER_LOCAL // Server type for now is only saved in same server.
                'prefixTemp' => 'temp', // Temp prefix for folders.
                'containerBasePath' => "@frontend/web", // Container base to save images.
                'cdn' => 'http://www.project.com', // If you want cdn.
                'symbolConcatTime' => '_' // Symbol to concat the name with the string time.
            ],
  ...
 ]
]

您应该在common\components文件夹中添加ResourceImage文件,覆盖此扩展,以配置以下选项。

<?php

namespace common\components;

class ResourceImage extends \jmoguelruiz\yii2\components\ResourceImage
{
    /**
     * Your types of resources
     */
    const TYPE_ONE = 'one';
    const TYPE_TWO = 'two';
    const TYPE_THREE = 'three';
    
    /**
     * Your sizes 
     */
    const SIZE_CROP = 'crop';
    const SIZE_250_250 = '250_250';
    const SIZE_200_200 = '200_200';
    
    /**
     * You resource path
     */
    public function resources()
    {
        return \yii\helpers\ArrayHelper::merge(parent::resources(),[
          self::TYPE_ONE => 'one',
          self::TYPE_TWO => 'two',
          self::TYPE_THREE => 'two' .  DIRECTORY_SEPARATOR . 'three' //  two/three
        ]);
    }
    
    /**
     * The images names to default resource.
     */
    public function resourcesDefault(){
        
        return \yii\helpers\ArrayHelper::merge(parent::resources(),[
          self::TYPE_ONE => 'default.jpg',
          self::TYPE_TWO => 'default.jpg',
          self::TYPE_THREE => 'default.jpg'
        ]);
        
    }
    
    /**
     * You can override the sizes for customize your size in your
     * project, the name of size will be the name of the new folder.
     * Example: 
     * 
     * image/player <- Here save the original
     * image/player/thumb <- Here save the size thumb
     * image/player/250_250 <- Here save your custom size.
     * 
     * @return type
     */
    public function getSizes()
    {
        return \yii\helpers\ArrayHelper::merge([
            self::SIZE_CROP => 'crop',
            self::SIZE_250_250 => '250_250',
            self::SIZE_200_200 => '200_200'
        ],parent::getSizes());
    }
    
}

创建保存图像的文件夹,并配置您的环境 enviroment/index.php 以设置权限。

    'Development' => [
        'path' => 'dev',
        'setWritable' => [
            'backend/runtime',
            'backend/web/assets',
            'frontend/runtime',
            'frontend/web/assets',
            'frontend/web/images/one/,  <--- Example
            'frontend/web/images/one_temp/, <--- Example
            'frontend/web/images/one/250_250, <--- Example
        ],
        'setExecutable' => [
            'yii',
            'yii_test',
        ],
        'setCookieValidationKey' => [
            'backend/config/main-local.php',
            'frontend/config/main-local.php',
        ],
    ],

用法

生成URL。

$resourceImage = Yii::$app->resourceImage;

// This function return a model ResourcePath.
$pathOne = $resourceImage->newPath([
    'root' => ['isWebUrl' => false],
    'basePath' => ['enviroment' => 'dev'],
    'resource' => ['type' => ResourceImage::TYPE_PLAYER],
    'size' => ['type' => ResourceImage::SIZE_THUMB],
    'name' => ['title' => 'imageOne', 'ext' => 'jpg', 'concatTime' => true]
]);

/*
 Result:
 /Users/josemoguel/Documents/fuentes/plantillas/project-template/frontend/web/images/dev/player/thumb/image_1485389319.jpg
*/ 
$pathOne->path;

保存一个图像文件。

$file = UploadedFile::getInstance($user, 'file');
// Generating the path to save the image.
// /Users/josemoguel/Documents/fuentes/plantillas/project-template/frontend/web/images/dev/player_temp/12321_1485389719.jpg
$imageOriginalTemp = $resourceImage->newPath([
 'root' => ['isWebUrl' => false],
 'resource' => ['type' => ResourceImage::TYPE_PLAYER, 'isTemp' => true],
 'name' => ['title' => '12321', 'ext' => $file->extension]
]);

//Uploading the image.
$resourceImage->upload($imageOriginalTemp, $file);
// Saving image, automatically detect if directory is temp, after remove the postFix _temp and save in the real path.
// player_temp -> player
$resourceImage->save($imageOriginalTemp);

保存多个大小的图像。

  $imageOriginalTemp = $resourceImage->newPath([
       'root' => ['isWebUrl' => false],
       'resource' => ['type' => ResourceImage::TYPE_PLAYER, 'isTemp' => true],
       'name' => ['title' => '12321', 'ext' => $file->extension]
  ]);
            
  $imageThumbnailTemp = $resourceImage->newPath(ArrayHelper::merge($imageOriginalTemp->config,[
        'size' => ['type' => ResourceImage::SIZE_THUMB]
  ]));
            
   $imageCropTemp = $resourceImage->newPath(ArrayHelper::merge($imageOriginalTemp->config,[
         'size' => ['type' => ResourceImage::SIZE_CROP]
   ]));
            
   $resourceImage->upload($imageOriginalTemp, $file);
   $resourceImage->copy($imageOriginalTemp, $imageThumbnailTemp);
   $resourceImage->copy($imageOriginalTemp, $imageCropTemp);
   $resourceImage->save($imageOriginalTemp);
            
   $resourceImage->thumbnail($imageThumbnailTemp);
   $resourceImage->save($imageThumbnailTemp);
            
   $resourceImage->crop($imageCropTemp);
   $resourceImage->save($imageCropTemp);

保存特定大小的图像。

  $imageOriginalTemp = $resourceImage->newPath([
       'root' => ['isWebUrl' => false],
       'resource' => ['type' => ResourceImage::TYPE_PLAYER, 'isTemp' => true],
       'name' => ['title' => '12321', 'ext' => $file->extension]
  ]);

  $resourceImage->upload($imageOriginalTemp, $file);
  // You can proccess the image with some functions in the componente, thumbnail, crop.
  $resourceImage->saveBySize(ResourceImage::SIZE_THUMB, $imageOriginalTemp, ['thumbnail']);

获取网络URL

// http://project-template.dev/images/dev/player/thumb/jijo.jpg
$resourceImage->getWebUrl("jijo.jpg", ResourceImage::TYPE_PLAYER, ResourceImage::SIZE_THUMB);

获取默认网络URL

//http://project-template.dev/images/dev/player/crop/default.jpg
$resourceImage->getDefaultWebUrl(ResourceImage::TYPE_PLAYER, ResourceImage::SIZE_CROP);

资源路径

生成新路径,您可以访问模型的数据。

class ResourcePath extends Model
{

    /**
     * Final path.
     * @var string 
     */
    public $path;

    /**
     * Configuration for final path.
     * @var arr 
     */
    public $config = [];

    /**
     * Name generated
     * @var string 
     */
    public $name;
    
    /**
     * Size generated
     * @var string 
     */
    public $size;
    
    /**
     * Resource generated
     * @var string
     */
    public $resource;
    
    /**
     * Base Path generated
     * @var string 
     */
    public $basePath;
    
    /**
     * Root generated
     * @var string 
     */
    public $root;
    
}

贡献

如果您想使用此组件并做出贡献,请发送电子邮件至 jmoguelruiz@gmail.com

从社区到社区...