Набросал плагин для ресайза изображений при загрузке, срабатывает на событие OnFileManagerUpload.
Для работы требуется сниппет phpThumbOf.
Массив настроек состоит из вложенных массивов настроек для разных директорий. Если файл загружается в директорию, для которой нет настроек - то берется конфиг по умолчанию, для корня сайта (/).
Во вложенных массивах должны быть параметры для phpThumb:
w - максимальная ширина изображений, по умолчанию 800px
h - максимальная высота изображения, по умолчанию 600px
zc - увеличение и обрезка, по умолчанию отключено
bg - фон картинки, нужно при $zc=0, по умолчанию белый
q - качество пережатия, по умолчанию - 100%
Вы можете добавлять еще какие-то параметры phpThumb в эти массивы, формате ключ => значение - все они попадут в сниппет.
Вообще, это скорее черновик, чем готовый плагин - ибо у каждого свои требования для обработки изображений. Можно, например, для картинки высчитывать ширину в зависимости от максимальной высоты.
Так что комментируйте и поправляйте.
<?php
/**
* ResizeOnUpload Plugin
*
* Events: OnFileManagerUpload
* Author: Vasiliy Naumkin <bezumkin@yandex.ru>
* Required: PhpThumbOf snippet for resizing images
*/
if ($modx->event->name != 'OnFileManagerUpload') {return;}
/* Settings */
$config = array(
'/' => array( // default config
'w' => 800 // max width of uploaded images
,'h' => 600 // max height of uploaded images
,'zc' => 0 // zoom & crop
,'bg' => '#fff' // backgroud, needed only for zc=0
,'q' => 100 // quality
)
//,'/assets/images/' => array()
);
/*----------*/
$file = $modx->event->params['files']['file'];
$directory = $modx->event->params['directory'];
if ($file['error'] != 0) {return;}
$name = $file['name'];
$extensions = explode(',', $modx->getOption('upload_images'));
if (array_key_exists($directory, $config)) {
$config = $config[$directory];
}
else {
$config = $config['/'];
}
$filename = MODX_BASE_PATH . $directory . $name;
$ext = substr(strrchr($name, '.'), 1);
if (in_array($ext, $extensions)) {
$sizes = getimagesize($filename);
$format = substr($sizes['mime'],6);
if ($sizes[0] > $config['w'] || $sizes[1] > $config['h']) {
if ($sizes[0] < $config['w']) {$config['w'] = $sizes[0];}
if ($sizes[1] < $config['h']) {$config['h'] = $sizes[1];}
$options = '';
foreach ($config as $k => $v) {
$options .= '&'.$k.'='.$v;
}
$resized = $modx->runSnippet('PhpThumbOf', array(
'input' => $directory.$name
,'options' => $options
));
rename(MODX_BASE_PATH . substr($resized, 1), $filename);
}
}
Сделано по вот этой просьбе.
Замечание, в плагине не учтены источники файлов. Он работает только для дефолтного источника…
И, кстати, я вместо runSnippet сделал так:
require_once MODX_CORE_PATH.'model/phpthumb/phpthumb.class.php';
Потому что, runSnippet('PhpThumbOf') генерировал ошибку, глянув в код — увидел, что он пытается получить id текущего ресурса, а ресурса то и нет…
ага я примерно так же решил проблему) хост тут совершенно не причем )
У меня работало без проблем, возможно обновился PhpThumbOf.
В любом случае, это не готовый пакет, а ответ на просьбу одного из посетителей. Если доведете до ума и выложите готовое расширения — буду только рад.
А как заставить ваш плагин уменьшать фото при загрузке modx gallery? И возможно ли это? может есть другие способы?
А какие события вызывает Gallery при загрузке фотографий?
На такие и надо переделать.
у Gallery нету событий. нужно править файл
для пакетной загрузки
В век дешевых цифромыльниц и жадных на хостинг людей очень часто возникает проблема на шаред-хостингах с памятью, необходимой для ресайза многомегапиксельных картинок на сервере.
Может сделать возможность заливки на сервер большой картинки, с последующим ресайзом до вменяемого размера при помощи сервиса boxresizer.com или аналогичных (правда другие что то не нашел).
Не всем секретаршам удается успешно объяснить, как и зачем ресайзить фоточки с цифровичков, а такой плагин решил бы проблему…
http://www.createit.ru/blog/modx/2012/plugin-resizeimageonupload-modx-revo/ нашел форк плагина Василия.
Он уже там отписывался) но читателям может пригодится чтобы невелосипедить)
Доработка плагина: Фото грузятся в выбранную директорию Внутри директории создается папка thumb в нее пишутся одноименные мниатюры Лог загрузки пишется в log.txt внутри папки
Выложил свой вариант
Отлично, молодец!
Добрый день! Скажите, пожалуйста, как сделать чтобы плагин работал при Multi-upload в компоненте Gallery?
Если она при этом не не вызывает событие OnFileManagerUpload - то никак.
Мы этот вопрос решили иначе и более комплексно.
Подскажите как сделать что бы плагин отрабатывал на все источники файлов. Сейчас я делаю еще один источник и если в нем параметры basePath и baseUrl пустые то плагин отрабатывает, а если добавляю путь то не срабатывает.