ModuleImage_EntityImage

Package framework.modules
Inheritance class ModuleImage_EntityImage » Entity » LsObject
Since 2.0
Source Code /framework/classes/modules/image/entity/Image.entity.class.php
Сущность для работы с изображением

Protected Properties

Hide inherited properties

PropertyTypeDescriptionDefined By
_aBehaviors Список поведений в виде готовых объектов, формируется автоматически LsObject
_aData array Данные сущности, на этот массив мапятся методы set* и get* Entity
aBehaviors array Список поведений LsObject
aValidateErrors array Список ошибок валидации в разрезе полей, например Entity
aValidateRules array Список правил валидации полей Entity
sPrimaryKey null|string Имя поля с первичным ключом в БД Entity
sValidateScenario string Сценарий валиадции полей Entity

Public Methods

Hide inherited methods

MethodDescriptionDefined By
AddBehaviorHook() Добавляет хук поведения LsObject
AttachBehavior() Присоединяет поведение к объекту LsObject
DetachBehavior() Отсоединяет поведение от объекта LsObject
GetBehavior() Возвращает объект поведения по его имени LsObject
GetBehaviors() Возвращает все объекты поведения LsObject
Init() Метод инициализации сущности, вызывается при её создании Entity
RemoveBehaviorHook() Удаляет хук поведения LsObject
RunBehaviorHook() Запускает хук поведения на выполнение LsObject
_Validate() Выполняет валидацию данных сущности Entity
__call() Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля Entity
__clone() При клонировании сбрасываем поведения LsObject
__construct() Если передать в конструктор ассоциативный массив свойств и их значений, то они автоматом загрузятся в сущность Entity
__get() Обработка доступа к объекты поведения LsObject
_addValidateError() Добавляет для поля ошибку в список ошибок Entity
_clearValidateErrors() Очищает список всех ошибок или для конкретного поля Entity
_createValidators() Создает и возвращает список валидаторов для сущности Entity
_getData() Получает массив данных сущности Entity
_getDataArray() Рекурсивное преобразование объекта и вложенных объектов в массив Entity
_getDataOne() Возвращает данные по конкретному полю Entity
_getPrimaryKey() Получение первичного ключа сущности (ключ, а не значение!) Entity
_getPrimaryKeyValue() Возвращает значение первичного ключа/поля Entity
_getValidateError() Возвращает первую ошибку для поля или среди всех полей Entity
_getValidateErrors() Возвращает список ошибок для всех полей или одного поля Entity
_getValidateRules() Возвращает список правил для валидации Entity
_getValidateScenario() Возвращает текущий сценарий валидации Entity
_getValidators() Возвращает список валидаторов с учетом текущего сценария Entity
_hasValidateErrors() Проверяет есть ли ошибки валидации Entity
_setData() Устанавливает данные сущности Entity
_setDataSafe() Устанавливает данные, но только те, которые есть в $this->aValidateRules Entity
_setValidateScenario() Устанавливает сценарий валидации Entity
cropFromSelected() Вырезает область выделенную пользователем с помощью библиотеки jCrop ModuleImage_EntityImage
cropProportion() Вырезает максимально возможный прямоугольный в нужной пропорции ModuleImage_EntityImage
cropSquare() Вырезает максимально возможный квадрат ModuleImage_EntityImage
getFormat() Возвращает формат изображения (его расширение) ModuleImage_EntityImage
getHeight() Возвращает высоту изображения ModuleImage_EntityImage
getParam() Возвращает конкретный параметр ModuleImage_EntityImage
getWidth() Возвращает ширину изображения ModuleImage_EntityImage
resize() Изменяет размеры изображения ModuleImage_EntityImage
save() Сохраняет изображение в файл ModuleImage_EntityImage
saveSmart() Сохраняет изображения в файл ModuleImage_EntityImage
saveTmp() Сохраняет изображение во временный локальный файл ModuleImage_EntityImage

Protected Methods

Hide inherited methods

MethodDescriptionDefined By
PrepareBehaviors() Инициализация поведений LsObject

Method Details

cropFromSelected() method
public ModuleImage_EntityImage cropFromSelected($aSelectedSize $aSelectedSize, null $iCanvasWidth=NULL)
$aSelectedSize $aSelectedSize
$iCanvasWidth null
{return} ModuleImage_EntityImage
Source Code: /framework/classes/modules/image/entity/Image.entity.class.php#212 (show)
public function cropFromSelected($aSelectedSize$iCanvasWidth null)
{
    if (
$oImage $this->getImage()) {
        
$iWSource $this->getWidth();
        
$iHSource $this->getHeight();
        
/**
         * Определяем коэффициент масштабируемости
         */
        
$fRation 1;
        if (
$iWSource and $iCanvasWidth) {
            
$fRation $iWSource $iCanvasWidth;
            if (
$fRation 1) {
                
$fRation 1;
            }
        }
        
/**
         * Проверяем корректность выделенной области
         */
        
if (isset($aSelectedSize['x']) and is_numeric($aSelectedSize['x'])
            and isset(
$aSelectedSize['y']) and is_numeric($aSelectedSize['y'])
            and isset(
$aSelectedSize['x2']) and is_numeric($aSelectedSize['x2'])
            and isset(
$aSelectedSize['y2']) and is_numeric($aSelectedSize['y2'])
        ) {
            
$aSelectedSize = array(
                
'x1' => round($fRation $aSelectedSize['x']),
                
'y1' => round($fRation $aSelectedSize['y']),
                
'x2' => round($fRation $aSelectedSize['x2']),
                
'y2' => round($fRation $aSelectedSize['y2'])
            );
        } else {
            
$this->setLastError('Incorrect image selected size');
            return 
$this;
        }
        
/**
         * Достаем переменные x1 и т.п. из $aSelectedSize
         */
        
extract($aSelectedSizeEXTR_PREFIX_SAME'ops');
        if (
$x1 $x2) {
            
// меняем значения переменных
            
$x1 $x1 $x2;
            
$x2 $x1 $x2;
            
$x1 $x1 $x2;
        }
        if (
$y1 $y2) {
            
$y1 $y1 $y2;
            
$y2 $y1 $y2;
            
$y1 $y1 $y2;
        }
        if (
$x1 0) {
            
$x1 0;
        }
        if (
$y1 0) {
            
$y1 0;
        }
        if (
$x2 $iWSource) {
            
$x2 $iWSource;
        }
        if (
$y2 $iHSource) {
            
$y2 $iHSource;
        }

        
$iW $x2 $x1;
        
// Допускаем минимальный клип в 32px (исключая маленькие изображения)
        
if ($iW 32 && $x1 32 <= $iWSource) {
            
$iW 32;
        }
        
$iH $y2 $y1;
        
/**
         * Вырезаем
         */
        
try {
            
$oPointStart = new Imagine\Image\Point($x1$y1);
            
$oBoxCrop = new Imagine\Image\Box($iW$iH);
            
$oImage->crop($oPointStart$oBoxCrop);
        } catch (
Imagine\Exception\Exception $e) {
            
$this->setLastError($e->getMessage());
        }
    }
    return 
$this;
}

Вырезает область выделенную пользователем с помощью библиотеки jCrop

cropProportion() method
public ModuleImage_EntityImage cropProportion(float $fProp, string $sPosition='center')
$fProp float Пропорция в котрой вырезать кроп, расчитывается как Width/Height
$sPosition string Вырезать из центра
{return} ModuleImage_EntityImage
Source Code: /framework/classes/modules/image/entity/Image.entity.class.php#153 (show)
public function cropProportion($fProp$sPosition 'center')
{
    if (
$oImage $this->getImage()) {
        try {
            
$oBox $oImage->getSize();
            
$iWidth $oBox->getWidth();
            
$iHeight $oBox->getHeight();
            
/**
             * Если высота и ширина уже в нужных пропорциях, то возвращаем изначальный вариант
             */
            
$iProp round($fProp2);
            if (
round($iWidth $iHeight2) == $iProp) {
                return 
$this;
            }
            
/**
             * Вырезаем прямоугольник из центра
             */
            
if (round($iWidth $iHeight2) <= $iProp) {
                
$iNewWidth $iWidth;
                
$iNewHeight round($iNewWidth $iProp);
            } else {
                
$iNewHeight $iHeight;
                
$iNewWidth $iNewHeight $iProp;
            }

            
$oBoxCrop = new Imagine\Image\Box($iNewWidth$iNewHeight);
            if (
$sPosition == 'center') {
                
$oPointStart = new Imagine\Image\Point(($iWidth $iNewWidth) / 2, ($iHeight $iNewHeight) / 2);
            } else {
                
$oPointStart = new Imagine\Image\Point(00);
            }
            
$oImage->crop($oPointStart$oBoxCrop);
            return 
$this;
        } catch (
Imagine\Exception\Exception $e) {
            
$this->setLastError($e->getMessage());
        }
    }
    return 
$this;
}

Вырезает максимально возможный прямоугольный в нужной пропорции

cropSquare() method
public ModuleImage_EntityImage cropSquare(string $sPosition='center')
$sPosition string Вырезать из центра
{return} ModuleImage_EntityImage
Source Code: /framework/classes/modules/image/entity/Image.entity.class.php#199 (show)
public function cropSquare($sPosition 'center')
{
    return 
$this->cropProportion(1$sPosition);
}

Вырезает максимально возможный квадрат

getFormat() method
public null|string getFormat()
{return} null|string
Source Code: /framework/classes/modules/image/entity/Image.entity.class.php#76 (show)
public function getFormat()
{
    
$aSize $this->getInfoSize();
    if (isset(
$aSize['mime'])) {
        switch (
$aSize['mime']) {
            case 
'image/png':
            case 
"image/x-png":
                return 
'png';
                break;
            case 
'image/gif':
                return 
'gif';
                break;
            case 
"image/pjpeg":
            case 
"image/jpeg":
            case 
"image/jpg":
                return 
'jpg';
                break;
            default:
                return 
'jpg';
        }
    }
    return 
null;
}

Возвращает формат изображения (его расширение)

getHeight() method
public int|null getHeight()
{return} int|null
Source Code: /framework/classes/modules/image/entity/Image.entity.class.php#62 (show)
public function getHeight()
{
    if (
$oImage $this->getImage()) {
        
$oBox $oImage->getSize();
        return 
$oBox->getHeight();
    }
    return 
null;
}

Возвращает высоту изображения

getParam() method
public null getParam($sName $sName)
$sName $sName
{return} null
Source Code: /framework/classes/modules/image/entity/Image.entity.class.php#37 (show)
public function getParam($sName)
{
    
$aParams $this->getParams();
    return isset(
$aParams[$sName]) ? $aParams[$sName] : null;
}

Возвращает конкретный параметр

getWidth() method
public int|null getWidth()
{return} int|null
Source Code: /framework/classes/modules/image/entity/Image.entity.class.php#48 (show)
public function getWidth()
{
    if (
$oImage $this->getImage()) {
        
$oBox $oImage->getSize();
        return 
$oBox->getWidth();
    }
    return 
null;
}

Возвращает ширину изображения

resize() method
public ModuleImage_EntityImage resize(int|null $iWidthDest, int|null $iHeightDest=NULL, bool $bForcedMinSize=true)
$iWidthDest int|null Ширина необходимого изображения на выходе
$iHeightDest int|null Высота необходимого изображения на выходе
$bForcedMinSize bool Растягивать изображение по ширине или нет, если исходное меньше. При false - изображение будет растянуто
{return} ModuleImage_EntityImage
Source Code: /framework/classes/modules/image/entity/Image.entity.class.php#109 (show)
public function resize($iWidthDest$iHeightDest null$bForcedMinSize true)
{
    if (
$oImage $this->getImage()) {
        try {
            
$oBox $oImage->getSize();

            if (
$bForcedMinSize) {
                if (
$iWidthDest and $iWidthDest $oBox->getWidth()) {
                    
$iWidthDest $oBox->getWidth();
                }
                if (
$iHeightDest and $iHeightDest $oBox->getHeight()) {
                    
$iHeightDest $oBox->getHeight();
                }
            }
            if (!
$iHeightDest) {
                
/**
                 * Производим пропорциональное уменьшение по ширине
                 */
                
$oBoxResize $oBox->widen($iWidthDest);
            } elseif (!
$iWidthDest) {
                
/**
                 * Производим пропорциональное уменьшение по высоте
                 */
                
$oBoxResize $oBox->heighten($iHeightDest);
            } else {
                
$oBoxResize = new Imagine\Image\Box($iWidthDest$iHeightDest);
            }

            
$oImage->resize($oBoxResize);
            return 
$this;
        } catch (
Imagine\Exception\Exception $e) {
            
$this->setLastError($e->getMessage());
        }
    }
    return 
$this;
}

Изменяет размеры изображения

save() method
public bool save(string $sFile)
$sFile string Полный путь до файла сохранения
{return} bool | string При успешном сохранении возвращает полный путь до файла
Source Code: /framework/classes/modules/image/entity/Image.entity.class.php#300 (show)
public function save($sFile)
{
    if (!
$oImage $this->getImage()) {
        return 
false;
    }
    try {
        
$sFormat = ($this->getParam('format_auto') && $this->getFormat()) ? $this->getFormat() : $this->getParam('format');
        
$sFileTmp Config::Get('path.tmp.server') . DIRECTORY_SEPARATOR func_generator(20);
        
$oImage->save($sFileTmp, array(
            
'format'  => $sFormat,
            
'quality' => $this->getParam('quality'),
        ));

        return 
$this->Image_SaveFile($sFileTmp$sFile0666true);
    } catch (
Imagine\Exception\Exception $e) {
        
$this->setLastError($e->getMessage());
        
// TODO: fix exception for Gd driver
        
if (strpos($e->getFile(), 'Imagine' DIRECTORY_SEPARATOR 'Gd')) {
            
restore_error_handler();
        }
    }
    return 
false;
}

Сохраняет изображение в файл

saveSmart() method
public bool saveSmart(string $sDir, string $sFile)
$sDir string Директория куда нужно сохранить изображение относительно корня сайта (path.root.server)
$sFile string Имя файла для сохранения, без расширения (расширение подставляется автоматически в зависимости от типа изображения)
{return} bool | string При успешном сохранении возвращает полный путь до файла
Source Code: /framework/classes/modules/image/entity/Image.entity.class.php#365 (show)
public function saveSmart($sDir$sFile)
{
    if (!
$oImage $this->getImage()) {
        return 
false;
    }
    try {
        
$sFormat = ($this->getParam('format_auto') && $this->getFormat()) ? $this->getFormat() : $this->getParam('format');
        
$sFileTmp Config::Get('path.tmp.server') . DIRECTORY_SEPARATOR func_generator(20);
        
$oImage->save($sFileTmp, array(
            
'format'  => $sFormat,
            
'quality' => $this->getParam('quality'),
        ));

        
$sFile .= '.' $sFormat;
        return 
$this->Image_SaveFileSmart($sFileTmp$sDir$sFile0666true);
    } catch (
Exception $e) {
        
$this->setLastError($e->getMessage());
        
// TODO: fix exception for Gd driver
        
if (strpos($e->getFile(), 'Imagine' DIRECTORY_SEPARATOR 'Gd')) {
            
restore_error_handler();
        }
    }
    return 
false;
}

Сохраняет изображения в файл

saveTmp() method
public bool saveTmp()
{return} bool | string При успешном сохранении возвращает полный локальный путь до файла
Source Code: /framework/classes/modules/image/entity/Image.entity.class.php#329 (show)
public function saveTmp()
{
    if (!
$oImage $this->getImage()) {
        return 
false;
    }
    try {
        
$sDirTmp Config::Get('path.tmp.server') . DIRECTORY_SEPARATOR 'image';
        if (!
is_dir($sDirTmp)) {
            @
mkdir($sDirTmp0777true);
        }
        
$sFormat = ($this->getParam('format_auto') && $this->getFormat()) ? $this->getFormat() : $this->getParam('format');
        
$sFileTmp $sDirTmp DIRECTORY_SEPARATOR func_generator(20);
        
$oImage->save($sFileTmp, array(
            
'format'  => $sFormat,
            
'quality' => $this->getParam('quality'),
        ));

        return 
$sFileTmp;
    } catch (
Imagine\Exception\Exception $e) {
        
$this->setLastError($e->getMessage());
        
// TODO: fix exception for Gd driver
        
if (strpos($e->getFile(), 'Imagine' DIRECTORY_SEPARATOR 'Gd')) {
            
restore_error_handler();
        }
    }
    return 
false;
}

Сохраняет изображение во временный локальный файл