mirror of
https://github.com/Oreolek/ifhub.club.git
synced 2024-06-16 23:00:51 +03:00
Автоматическое создание превью изображений медиа нужного размера
This commit is contained in:
parent
201dba33f6
commit
c1235f6507
|
@ -888,7 +888,7 @@ class ModuleBlog extends Module {
|
|||
* Теперь можно удалить временный файл
|
||||
*/
|
||||
$this->Fs_RemoveFileLocal($sFileTmp);
|
||||
$oBlog->setAvatar($this->Fs_GetPathRelative($sFileResult,true));
|
||||
$oBlog->setAvatar($sFileResult);
|
||||
return true;
|
||||
}
|
||||
/**
|
||||
|
|
|
@ -268,7 +268,8 @@ class ModuleMedia extends ModuleORM {
|
|||
$oMedia=Engine::GetEntity('ModuleMedia_EntityMedia');
|
||||
$oMedia->setUserId($this->oUserCurrent ? $this->oUserCurrent->getId() : null);
|
||||
$oMedia->setType(self::TYPE_IMAGE);
|
||||
$oMedia->setFilePath($this->Fs_GetPathRelative($sFileResult,true));
|
||||
$oMedia->setTargetType($sTargetType);
|
||||
$oMedia->setFilePath($sFileResult);
|
||||
$oMedia->setFileName($aPathInfo['filename']);
|
||||
$oMedia->setFileSize(filesize($sFileTmp));
|
||||
$oMedia->setWidth($iWidth);
|
||||
|
@ -596,10 +597,43 @@ class ModuleMedia extends ModuleORM {
|
|||
));
|
||||
return $bRes;
|
||||
}
|
||||
public function GetImageWebPath($sPath,$sWidth=null) {
|
||||
|
||||
public function GetFileWebPath($oMedia,$sSize=null) {
|
||||
if ($oMedia->getType()==self::TYPE_IMAGE) {
|
||||
/**
|
||||
* Проверяем необходимость автоматического создания превью нужного размера - если разрешено настройками и файл НЕ существует
|
||||
*/
|
||||
if (Config::Get('module.media.image.autoresize') and !$this->Image_IsExistsFile($this->GetImagePathBySize($oMedia->getFilePath(),$sSize))) {
|
||||
/**
|
||||
* Запускаем генерацию изображения нужного размера
|
||||
*/
|
||||
$aSize=$this->ParsedImageSize($sSize);
|
||||
|
||||
$aParams=$this->Image_BuildParams('media.'.$oMedia->getTargetType());
|
||||
$sNewFileName=$this->GetImagePathBySize($oMedia->getFilePath(),$sSize);
|
||||
if($oImage=$this->Image_OpenFrom($oMedia->getFilePath(),$aParams)) {
|
||||
if ($aSize['crop']) {
|
||||
$oImage->cropProportion($aSize['w']/$aSize['h'],'center');
|
||||
}
|
||||
$oImage->resize($aSize['w'],$aSize['h'],true)->save($sNewFileName);
|
||||
/**
|
||||
* Обновляем список размеров
|
||||
*/
|
||||
$aSizeOld=(array)$oMedia->getDataOne('image_sizes');
|
||||
$aSizeOld[]=$aSize;
|
||||
$oMedia->setDataOne('image_sizes',$aSizeOld);
|
||||
$oMedia->Update();
|
||||
}
|
||||
}
|
||||
return $this->GetImageWebPath($oMedia->getFilePath(),$sSize);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public function GetImageWebPath($sPath,$sSize=null) {
|
||||
$sPath=$this->Fs_GetPathWeb($sPath);
|
||||
if ($sWidth) {
|
||||
return $this->GetImagePathBySize($sPath,$sWidth);
|
||||
if ($sSize) {
|
||||
return $this->GetImagePathBySize($sPath,$sSize);
|
||||
} else {
|
||||
return $sPath;
|
||||
}
|
||||
|
@ -630,6 +664,44 @@ class ModuleMedia extends ModuleORM {
|
|||
return $aPathInfo['dirname'].'/'.$aPathInfo['filename'].'_'.$sSize.'.'.$aPathInfo['extension'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Парсит строку с размером изображения
|
||||
* Варианты входной строки:
|
||||
* 100
|
||||
* 100crop
|
||||
* 100x150
|
||||
* 100x150crop
|
||||
* x150
|
||||
* 100x
|
||||
*
|
||||
* @param string $sSize
|
||||
*
|
||||
* @return array Массив вида array('w'=>100,'h'=>150,'crop'=>true)
|
||||
*/
|
||||
public function ParsedImageSize($sSize) {
|
||||
$aSize=array(
|
||||
'w'=>null,
|
||||
'h'=>null,
|
||||
'crop'=>false,
|
||||
);
|
||||
|
||||
if (preg_match('#^(\d+)?(x)?(\d+)?([a-z]{2,10})?$#Ui',$sSize,$aMatch)) {
|
||||
$iW=(isset($aMatch[1]) and $aMatch[1]) ? $aMatch[1] : null;
|
||||
$iH=(isset($aMatch[3]) and $aMatch[3]) ? $aMatch[3] : null;
|
||||
$bDelim=(isset($aMatch[2]) and $aMatch[2]) ? true : false;
|
||||
$sMod=(isset($aMatch[4]) and $aMatch[4]) ? $aMatch[4] : '';
|
||||
|
||||
if (!$bDelim) {
|
||||
$iW=$iH;
|
||||
}
|
||||
$aSize['w']=$iW;
|
||||
$aSize['h']=$iH;
|
||||
if ($sMod) {
|
||||
$aSize[$sMod]=true;
|
||||
}
|
||||
}
|
||||
return $aSize;
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверка владельца с типом "topic"
|
||||
|
|
|
@ -51,9 +51,16 @@ class ModuleMedia_EntityMedia extends EntityORM {
|
|||
return true;
|
||||
}
|
||||
|
||||
public function getFileWebPath($sWidth=null) {
|
||||
/**
|
||||
* Возвращает URL до файла нужного размера, в основном используется для изображений
|
||||
*
|
||||
* @param null $sSize
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
public function getFileWebPath($sSize=null) {
|
||||
if ($this->getFilePath()) {
|
||||
return $this->Media_GetImageWebPath($this->getFilePath(),$sWidth);
|
||||
return $this->Media_GetFileWebPath($this,$sSize);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -192,6 +192,7 @@ $config['module']['image']['params']['blog_avatar']['size_max_height']=500;
|
|||
/**
|
||||
* Модуль Media
|
||||
*/
|
||||
$config['module']['media']['image']['autoresize'] = true; // Разрешает автоматическое создание изображений нужного размера при их запросе
|
||||
$config['module']['media']['image']['max_size_url'] = 1024; // Максимальный размер изображения в kB для загрузки по URL
|
||||
$config['module']['media']['image']['sizes'] = array( // список размеров, которые необходимо делать при загрузке изображения
|
||||
array(
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit db8666e71500a04d74fdf81c43b9f507031b92bc
|
||||
Subproject commit 72e2e230186f03ed83fce20fd13e08e4291497f3
|
|
@ -488,4 +488,9 @@ ALTER TABLE `prefix_poll_vote` ADD `answers` VARCHAR( 500 ) NOT NULL AFTER `user
|
|||
-- 11.02.2014
|
||||
ALTER TABLE `prefix_property` CHANGE `type` `type` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'text';
|
||||
ALTER TABLE `prefix_property_value` ADD `value_date` DATETIME NULL DEFAULT NULL AFTER `value_varchar` ,
|
||||
ADD INDEX ( `value_date` ) ;
|
||||
ADD INDEX ( `value_date` ) ;
|
||||
|
||||
|
||||
-- 17.02.2014
|
||||
ALTER TABLE `prefix_media` ADD `target_type` VARCHAR( 50 ) NOT NULL AFTER `type` ,
|
||||
ADD INDEX ( `target_type` ) ;
|
Loading…
Reference in a new issue