From 1fb74a55d61f5139502c6416778b013feeef53b5 Mon Sep 17 00:00:00 2001 From: Mzhelskiy Maxim Date: Tue, 18 Aug 2015 20:20:59 +0700 Subject: [PATCH] =?UTF-8?q?Media=20-=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE?= =?UTF-8?q?=D0=B6=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20=D1=83=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D1=8C=D1=88=D0=B0=D1=82=D1=8C=20=D0=BE=D1=80=D0=B8=D0=B3=D0=B8?= =?UTF-8?q?=D0=BD=D0=B0=D0=BB=20=D0=B8=D0=B7=D0=BE=D0=B1=D1=80=D0=B0=D0=B6?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B8=D0=BB=D0=B8=20=D0=B2=D0=BE?= =?UTF-8?q?=D0=BE=D0=B1=D1=89=D0=B5=20=D0=B5=D0=B3=D0=BE=20=D0=BD=D0=B5=20?= =?UTF-8?q?=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D1=8F=D1=82=D1=8C.=20#704?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../classes/modules/media/Media.class.php | 34 ++++++++++++++++--- application/config/config.php | 1 + 2 files changed, 31 insertions(+), 4 deletions(-) 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,