Плагин автоматического сжатия изображения при загрузке для MODX Revolution

Часто менеджеры загружают огромные изображения, например, 5000x5000px, это съедает место на сервере и может увеличить загрузку страницы. Можно, конечно, ограничить размер загружаемых файлов в настройках MODX Revolution, но можно воспользоваться плагином.

Дополнительно:

Плагин будет сжимать изображения при загрузке, заменяя исходные.

Назовем плагин, например, "resizeImgOnUpload" и вешаем на событие "OnFileManagerUpload", приоритет у события ставим "-1" (или "0").

<?php
$fullPath = $source->getBases()['pathAbsolute'] . $directory;
foreach ($files as $file) {

if (strripos($file['type'], 'image') === false || $file['type'] == 'image/svg+xml') {
return;
}

$name = $file['name'];
$pathToImage = $fullPath . $name;

if (exif_imagetype($pathToImage) == IMAGETYPE_JPEG) {
$extension = 'jpeg';
} elseif (exif_imagetype($pathToImage) == IMAGETYPE_PNG) {
$extension = 'png';
} elseif (exif_imagetype($pathToImage) == IMAGETYPE_GIF) {
return;
}

$params = array(
'w' => 1280,
'f' => $extension,
'q' => 98,
);

$phpThumb = $modx->getService('modphpthumb', 'modPhpThumb', MODX_CORE_PATH . 'model/phpthumb/', array());
$phpThumb->setSourceFilename($pathToImage);

foreach ($params as $k => $v) {
$phpThumb->setParameter($k, $v);
}

if ($phpThumb->GenerateThumbnail()) {
if (!$phpThumb->renderToFile($pathToImage)) {
$modx->log(1, 'Ошибка сохранения изображения в [' . $pathToImage . ']');
}
} else {
$modx->log(1, print_r($phpThumb->debugmessages, 1));
}

}

В массив $params можно передавать и другие параметры библиотеки phpThumb, например, водяной знак и т.п..

В дополнение см. статью о работе phpThumb вне MODX Revolution - https://modx.pro/development/619




Комментарии к посту