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
Property | Type | Description | Defined 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
Method | Description | Defined 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
Method | Description | Defined 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($aSelectedSize, EXTR_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($fProp, 2);
if (round($iWidth / $iHeight, 2) == $iProp) {
return $this;
}
/**
* Вырезаем прямоугольник из центра
*/
if (round($iWidth / $iHeight, 2) <= $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(0, 0);
}
$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, $sFile, 0666, true);
} 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, $sFile, 0666, true);
} 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($sDirTmp, 0777, true);
}
$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;
}
Сохраняет изображение во временный локальный файл