diff --git a/application/classes/modules/media/Media.class.php b/application/classes/modules/media/Media.class.php index 1d9ec001..305b58c0 100644 --- a/application/classes/modules/media/Media.class.php +++ b/application/classes/modules/media/Media.class.php @@ -431,11 +431,29 @@ class ModuleMedia extends ModuleORM /** * Сохраняем оригинальную копию */ - if (!$sFileResult = $oImage->saveSmart($sPath, $sFileName)) { - $this->Fs_RemoveFileLocal($sFileTmp); - return $this->Image_GetLastError(); + $sFileResult = null; + $mOriginalSize = $this->GetConfigParam('image.original', $sTargetType); + if ($mOriginalSize === true) { + if (!$sFileResult = $oImage->saveSmart($sPath, $sFileName)) { + $this->Fs_RemoveFileLocal($sFileTmp); + return $this->Image_GetLastError(); + } + } elseif (is_string($mOriginalSize)) { + /** + * Ресайзим оригинал + */ + $aOriginalSize = $this->ParsedImageSize($mOriginalSize); + if ($aOriginalSize['crop']) { + $oImage->cropProportion($aOriginalSize['w'] / $aOriginalSize['h'], 'center'); + } + if (!$sFileResult = $oImage->resize($aOriginalSize['w'], $aOriginalSize['h'], true)->saveSmart($sPath, $sFileName) + ) { + $this->Fs_RemoveFileLocal($sFileTmp); + return $this->Image_GetLastError(); + } } + $aSizes = $this->GetConfigParam('image.sizes', $sTargetType); /** * Перед запуском генерации подчищаем память @@ -444,7 +462,15 @@ class ModuleMedia extends ModuleORM /** * Генерируем варианты с необходимыми размерами */ - $this->GenerateImageBySizes($sFileTmp, $sPath, $sFileName, $aSizes, $aParams); + $sFileResultLast = $this->GenerateImageBySizes($sFileTmp, $sPath, $sFileName, $aSizes, $aParams); + if (!$sFileResult) { + /** + * Оригинала нет, поэтому получаем фейковый путь до основного файла (нужен для получения файлов других размеров) + */ + $aPathInfoLast = pathinfo($sFileResultLast); + $aFileNamePart = explode('_', $aPathInfoLast['filename']); + $sFileResult = $aPathInfoLast['dirname'] . '/' . $aFileNamePart[0] . '.' . $aPathInfoLast['extension']; + } /** * Сохраняем медиа */ diff --git a/application/config/config.php b/application/config/config.php index 26931f2e..2d99c33e 100644 --- a/application/config/config.php +++ b/application/config/config.php @@ -284,6 +284,7 @@ $config['module']['image']['params']['blog_avatar']['size_max_height'] = 1000; $config['module']['media']['max_size'] = 3*1024; // Максимальный размер файла в kB $config['module']['media']['image']['max_size'] = 5*1024; // Максимальный размер файла изображения в kB $config['module']['media']['image']['autoresize'] = true; // Разрешает автоматическое создание изображений нужного размера при их запросе +$config['module']['media']['image']['original'] = '1500x'; // Размер для хранения оригинала. Если true, то будет сохраняться исходный оригинал без ресайза. Если false, то оригинал сохраняться не будет $config['module']['media']['image']['sizes'] = array( // список размеров, которые необходимо делать при загрузке изображения array( 'w' => 1000,