ModuleImage

Package engine.modules
Inheritance class ModuleImage » Module » LsObject
Since 1.0
Source Code /engine/modules/image/Image.class.php
Модуль обработки изображений Использует библиотеку LiveImage

Protected Properties

Hide inherited properties

PropertyTypeDescriptionDefined By
aParamsDefault array Настройки модуля по умолчанию ModuleImage
bIsInit bool Указывает на то, была ли проведенна инициализация модуля Module
oEngine Engine Объект ядра Module
sLastErrorText string Тескт последней ошибки ModuleImage

Public Methods

Hide inherited methods

MethodDescriptionDefined By
BuildHTML() Возвращает валидный Html код тега ModuleImage
BuildParams() Возврашает параметры для группы, если каких то параметров в группе нет, то используются дефолтные ModuleImage
ClearLastError() Очищает текст последней ошибки ModuleImage
CopyFileToLocal() Копирует файл изображения в локальную файловую систему ModuleImage
CreateDirectory() Создает каталог по указанному адресу (с учетом иерархии) ModuleImage
CreateImageObject() Возвращает объект изображения ModuleImage
CropProportion() Вырезает максимально возможный прямоугольный в нужной пропорции ModuleImage
CropSquare() Вырезает максимально возможный квадрат ModuleImage
GetIdDir() Получает директорию для данного пользователя ModuleImage
GetLastError() Получает текст последней ошибки ModuleImage
GetServerPath() Возвращает серверный адрес по переданному web-адресу ModuleImage
GetWebPath() Возвращает WEB адрес по переданному серверному адресу ModuleImage
Init() Инициализация модуля ModuleImage
RemoveFile() Удаление файла изображения ModuleImage
Resize() Resize,copy image, ModuleImage
SaveFile() Сохраняет(копирует) файл изображения на сервер ModuleImage
SetInit() Помечает модуль как инициализированный Module
SetLastError() Устанавливает текст последней ошибки ModuleImage
Shutdown() Метод срабатывает при завершении работы ядра Module
__call() Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля Module
__construct() При создании модуля передаем объект ядра Module
isInit() Возвращает значение флага инициализации модуля Module

Protected Methods

Hide inherited methods

MethodDescriptionDefined By
__clone() Блокируем копирование/клонирование объекта Module

Property Details

aParamsDefault property
protected array $aParamsDefault;

Настройки модуля по умолчанию

sLastErrorText property
protected string $sLastErrorText;

Тескт последней ошибки

Method Details

BuildHTML() method
public string BuildHTML(string $sPath, array $aParams)
$sPath string WEB адрес изображения
$aParams array Параметры
{return} string
Source Code: /engine/modules/image/Image.class.php#407 (show)
public function BuildHTML($sPath,$aParams) {
    
$sText='<img src="'.$sPath.'" ';
    if (isset(
$aParams['title']) and $aParams['title']!='') {
        
$sText.=' title="'.htmlspecialchars($aParams['title']).'" ';
        
/**
         * Если не определен ALT заполняем его тайтлом
         */
        
if(!isset($aParams['alt'])) $aParams['alt']=$aParams['title'];
    }
    if (isset(
$aParams['align']) and in_array($aParams['align'],array('left','right','center'))) {
        if (
$aParams['align'] == 'center') {
            
$sText.=' class="image-center"';
        } else {
            
$sText.=' align="'.htmlspecialchars($aParams['align']).'" ';
        }
    }
    
$sAlt = isset($aParams['alt'])
        ? 
' alt="'.htmlspecialchars($aParams['alt']).'"'
        
' alt=""';
    
$sText.=$sAlt.' />';

    return 
$sText;
}

Возвращает валидный Html код тега

BuildParams() method
public array BuildParams(string $sName=NULL)
$sName string Имя группы
{return} array
Source Code: /engine/modules/image/Image.class.php#96 (show)
public function BuildParams($sName=null) {
    if(
is_null($sName)) {
        return 
Config::Get('module.image.default');
    }

    
$aDefault = (array)Config::Get('module.image.default');
    
$aNamed   = (array)Config::Get('module.image.'.strtolower($sName));

    return 
func_array_merge_assoc($aDefault,$aNamed);
}

Возврашает параметры для группы, если каких то параметров в группе нет, то используются дефолтные

ClearLastError() method
public void ClearLastError()
Source Code: /engine/modules/image/Image.class.php#87 (show)
public function ClearLastError() {
    
$this->sLastErrorText=null;
}

Очищает текст последней ошибки

CopyFileToLocal() method
public bool CopyFileToLocal(string $sFileSource, string $sFileDistLocal)
$sFileSource string Полный серверный путь до файла (может быть на удаленном сервере)
$sFileDistLocal string Полный серверный путь до локального файла
{return} bool
Source Code: /engine/modules/image/Image.class.php#343 (show)
public function CopyFileToLocal($sFileSource,$sFileDistLocal) {
    if (@
copy($sFileSource,$sFileDistLocal)) {
        return 
true;
    }
    return 
false;
}

Копирует файл изображения в локальную файловую систему

CreateDirectory() method
public void CreateDirectory(string $sDirDest)
$sDirDest string Каталог относительно корня сайта
Source Code: /engine/modules/image/Image.class.php#354 (show)
public function CreateDirectory($sDirDest) {
    @
func_mkdir(Config::Get('path.root.server'),$sDirDest);
}

Создает каталог по указанному адресу (с учетом иерархии)

CreateImageObject() method
public LiveImage CreateImageObject($sFile $sFile)
$sFile $sFile Путь до изображения
{return} LiveImage
Source Code: /engine/modules/image/Image.class.php#112 (show)
public function CreateImageObject($sFile) {
    return new 
LiveImage($sFile);
}

Возвращает объект изображения

CropProportion() method
public LiveImage CropProportion(LiveImage $oImage, int $iW, int $iH, bool $bCenter=true)
$oImage LiveImage Объект изображения
$iW int Ширина для определения пропорции
$iH int Высота для определения пропорции
$bCenter bool Вырезать из центра
{return} LiveImage
Source Code: /engine/modules/image/Image.class.php#260 (show)
public function CropProportion(LiveImage $oImage,$iW,$iH,$bCenter=true) {

    if(!
$oImage || $oImage->get_last_error()) {
        return 
false;
    }
    
$iWidth  $oImage->get_image_params('width');
    
$iHeight $oImage->get_image_params('height');
    
/**
     * Если высота и ширина уже в нужных пропорциях, то возвращаем изначальный вариант
     */
    
$iProp=round($iW/$iH2);
    if(
round($iWidth/$iHeight2)==$iProp){ return $oImage; }

    
/**
     * Вырезаем прямоугольник из центра
     */
    
if (round($iWidth/$iHeight2)<=$iProp) {
        
$iNewWidth=$iWidth;
        
$iNewHeight=round($iNewWidth/$iProp);
    } else {
        
$iNewHeight=$iHeight;
        
$iNewWidth=$iNewHeight*$iProp;
    }

    if (
$bCenter) {
        
$oImage->crop($iNewWidth,$iNewHeight,($iWidth-$iNewWidth)/2,($iHeight-$iNewHeight)/2);
    } else {
        
$oImage->crop($iNewWidth,$iNewHeight,0,0);
    }
    
/**
     * Возвращаем объект изображения
     */
    
return $oImage;
}

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

CropSquare() method
public LiveImage CropSquare(LiveImage $oImage, $bCenter=true)
$oImage LiveImage Объект изображения
$bCenter
{return} LiveImage
Source Code: /engine/modules/image/Image.class.php#225 (show)
public function CropSquare(LiveImage $oImage,$bCenter=true) {
    if(!
$oImage || $oImage->get_last_error()) {
        return 
false;
    }
    
$iWidth  $oImage->get_image_params('width');
    
$iHeight $oImage->get_image_params('height');
    
/**
     * Если высота и ширина совпадают, то возвращаем изначальный вариант
     */
    
if($iWidth==$iHeight){ return $oImage; }

    
/**
     * Вырезаем квадрат из центра
     */
    
$iNewSize min($iWidth,$iHeight);

    if (
$bCenter) {
        
$oImage->crop($iNewSize,$iNewSize,($iWidth-$iNewSize)/2,($iHeight-$iNewSize)/2);
    } else {
        
$oImage->crop($iNewSize,$iNewSize,0,0);
    }
    
/**
     * Возвращаем объект изображения
     */
    
return $oImage;
}

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

GetIdDir() method
public string GetIdDir(int $sId)
$sId int Целое число, обычно это ID пользователя
{return} string
Source Code: /engine/modules/image/Image.class.php#397 (show)
public function GetIdDir($sId) {
    return 
Config::Get('path.uploads.images').'/'.preg_replace('~(.{2})~U'"\\1/"str_pad($sId6"0"STR_PAD_LEFT)).date('Y/m/d');
}

Получает директорию для данного пользователя Используется фомат хранения данных (/images/us/er/id/yyyy/mm/dd/file.jpg)

GetLastError() method
public string GetLastError()
{return} string
Source Code: /engine/modules/image/Image.class.php#72 (show)
public function GetLastError() {
    return 
$this->sLastErrorText;
}

Получает текст последней ошибки

GetServerPath() method
public string GetServerPath(string $sPath)
$sPath string WEB адрес изображения
{return} string
Source Code: /engine/modules/image/Image.class.php#363 (show)
public function GetServerPath($sPath) {
    
/**
     * Определяем, принадлежит ли этот адрес основному домену
     */
    
if(parse_url($sPath,PHP_URL_HOST)!=parse_url(Config::Get('path.root.web'),PHP_URL_HOST)) {
        return 
$sPath;
    }
    
/**
     * Выделяем адрес пути
     */
    
$sPath ltrim(parse_url($sPath,PHP_URL_PATH),'/');
    if(
$iOffset Config::Get('path.offset_request_url')){
        
$sPath preg_replace('#^([^/]+/*){'.$iOffset.'}#msi'''$sPath);
    }
    return 
rtrim(Config::Get('path.root.server'),'/').'/'.$sPath;
}

Возвращает серверный адрес по переданному web-адресу

GetWebPath() method
public string GetWebPath(string $sPath)
$sPath string Серверный адрес(путь) изображения
{return} string
Source Code: /engine/modules/image/Image.class.php#385 (show)
public function GetWebPath($sPath) {
    
$sServerPath rtrim(str_replace(DIRECTORY_SEPARATOR,'/',Config::Get('path.root.server')),'/');
    
$sWebPath    rtrim(Config::Get('path.root.web'), '/');
    return 
str_replace($sServerPath$sWebPathstr_replace(DIRECTORY_SEPARATOR,'/',$sPath));
}

Возвращает WEB адрес по переданному серверному адресу

Init() method
public void Init()
Source Code: /engine/modules/image/Image.class.php#61 (show)
public function Init() {
    
$this->aParamsDefault = array(
        
'watermark_use'=>false,
        
'round_corner' =>false
    
);
}

Инициализация модуля

RemoveFile() method
public bool RemoveFile(string $sFile)
$sFile string Полный серверный путь до файла
{return} bool
Source Code: /engine/modules/image/Image.class.php#330 (show)
public function RemoveFile($sFile) {
    if (
file_exists($sFile)) {
        return 
unlink($sFile);
    }
    return 
false;
}

Удаление файла изображения

Resize() method
public string|bool Resize(string $sFileSrc, string $sDirDest, string $sFileDest, int $iWidthMax, int $iHeightMax, int|null $iWidthDest=NULL, int|null $iHeightDest=NULL, bool $bForcedMinSize=true, array|null $aParams=NULL, LiveImage|null $oImage=NULL)
$sFileSrc string Исходный файл изображения
$sDirDest string Директория куда нужно сохранить изображение относительно корня сайта (path.root.server)
$sFileDest string Имя файла для сохранения, без расширения
$iWidthMax int Максимально допустимая ширина изображения
$iHeightMax int Максимало допустимая высота изображения
$iWidthDest int|null Ширина необходимого изображения на выходе
$iHeightDest int|null Высота необходимого изображения на выходе
$bForcedMinSize bool Растягивать изображение по ширине или нет, если исходное меньше. При false - изображение будет растянуто
$aParams array|null Параметры
$oImage LiveImage|null Объект изображения, если null то будет содано автоматически
{return} string|bool Полный серверный путь до сохраненного изображения
Source Code: /engine/modules/image/Image.class.php#131 (show)
public function Resize($sFileSrc,$sDirDest,$sFileDest,$iWidthMax,$iHeightMax,$iWidthDest=null,$iHeightDest=null,$bForcedMinSize=true,$aParams=null,$oImage=null) {
    
$this->ClearLastError();
    
/**
     * Если параметры не переданы, устанавливаем действия по умолчанию
     */
    
if(!is_array($aParams)) {
        
$aParams=$this->aParamsDefault;
    }
    
/**
     * Если объект не передан как параметр,
     * создаем новый
     */
    
if(!$oImage$oImage=$this->CreateImageObject($sFileSrc);

    if(
$oImage->get_last_error()){
        
$this->SetLastError($oImage->get_last_error());
        return 
false;
    }

    
$sFileDest.='.'.$oImage->get_image_params('format');
    if ((
$oImage->get_image_params('width')>$iWidthMax)
        or (
$oImage->get_image_params('height')>$iHeightMax)) {
        return 
false;
    }

    if (
$iWidthDest) {
        if (
$bForcedMinSize and ($iWidthDest>$oImage->get_image_params('width'))) {
            
$iWidthDest=$oImage->get_image_params('width');
        }
        
/**
         * Ресайзим и выводим результат в файл.
         * Если не задана новая высота, то применяем масштабирование.
         * Если нужно добавить Watermark, то запрещаем ручное управление alfa-каналом
         */
        
$oImage->resize($iWidthDest,$iHeightDest,(!$iHeightDest),(!$aParams['watermark_use']));

        
/**
         * Добавляем watermark согласно в конфигурации заданым параметрам
         */
        
if($aParams['watermark_use']) {
            if (
$oImage->get_image_params('width')>$aParams['watermark_min_width'] and $oImage->get_image_params('height')>$aParams['watermark_min_height']) {
                switch(
$aParams['watermark_type']) {
                    default:
                    case 
'text':
                        
$oImage->set_font(
                            
$aParams['watermark_font_size'],  0,
                            
$aParams['path']['fonts'].$aParams['watermark_font'].'.ttf'
                        
);

                        
$oImage->watermark(
                            
$aParams['watermark_text'],
                            
explode(',',$aParams['watermark_position'],2),
                            
explode(',',$aParams['watermark_font_color']),
                            
explode(',',$aParams['watermark_back_color']),
                            
$aParams['watermark_font_alfa'],
                            
$aParams['watermark_back_alfa']
                        );
                        break;
                    case 
'image':
                        
$oImage->paste_image(
                            
$aParams['path']['watermarks'].$aParams['watermark_image'],
                            
falseexplode(',',$aParams['watermark_position'],2)
                        );
                        break;
                }
            }
        }
        
/**
         * Скругляем углы
         */
        
if($aParams['round_corner']) {
            
$oImage->round_corners($aParams['round_corner_radius'], $aParams['round_corner_rate']);
        }
        
/**
         * Для JPG формата устанавливаем output quality, если это предусмотрено в конфигурации
         */
        
if(isset($aParams['jpg_quality']) and $oImage->get_image_params('format')=='jpg') {
            
$oImage->set_jpg_quality($aParams['jpg_quality']);
        }

        
$sFileTmp=Config::Get('sys.cache.dir').func_generator(20);
        
$oImage->output(null,$sFileTmp);
        return 
$this->SaveFile($sFileTmp,$sDirDest,$sFileDest,0666,true);
    } else{
        return 
$this->SaveFile($sFileSrc,$sDirDest,$sFileDest,0666,false);
    }
    return 
false;
}

Resize,copy image, make rounded corners and add watermark

SaveFile() method
public bool SaveFile(string $sFileSource, string $sDirDest, string $sFileDest, int|null $iMode=NULL, bool $bRemoveSource=false)
$sFileSource string Полный путь до исходного файла
$sDirDest string Каталог для сохранения файла относительно корня сайта
$sFileDest string Имя файла для сохранения
$iMode int|null Права chmod для файла, например, 0777
$bRemoveSource bool Удалять исходный файл или нет
{return} bool | string
Source Code: /engine/modules/image/Image.class.php#305 (show)
public function SaveFile($sFileSource,$sDirDest,$sFileDest,$iMode=null,$bRemoveSource=false) {
    
$sFileDestFullPath=rtrim(Config::Get('path.root.server'),"/").'/'.trim($sDirDest,"/").'/'.$sFileDest;
    
$this->CreateDirectory($sDirDest);

    
$bResult=copy($sFileSource,$sFileDestFullPath);
    if (
$bResult and !is_null($iMode)) {
        
chmod($sFileDestFullPath,$iMode);
    }
    if (
$bRemoveSource) {
        
unlink($sFileSource);
    }
    
/**
     * Если копирование прошло успешно, возвращаем новый серверный путь до файла
     */
    
if ($bResult) {
        return 
$sFileDestFullPath;
    }
    return 
false;
}

Сохраняет(копирует) файл изображения на сервер Если переопределить данный метод, то можно сохранять изображения, например, на Amazon S3

SetLastError() method
public void SetLastError(string $sText)
$sText string Текст ошибки
Source Code: /engine/modules/image/Image.class.php#80 (show)
public function SetLastError($sText) {
    
$this->sLastErrorText=$sText;
}

Устанавливает текст последней ошибки