Решение для ресайза картинок при загрузке?
Извечная проблема — клиенты порой загружают очень большие фотографии. Нашел такое решение:
bezumkin.ru/sections/components/118/, не завелось — не поддерживает источники файлов.
Есть ли готовое готовое проверенное решение для этого дела? А пока свой велосипед с поддержкой источников (переписал по ссылке выше).
Должен быть установлен phpThumbOn.
Подписываем на событие OnFileManagerUpload, приоритет -1 (должен срабатывать раньше, чем fileTranslit )
Параметр phpthumb_config — json строка с параметрами
И еще вопрос — есть ли готовое решения для ресайза картинок из контента на лету?
Т.е. алгоритм такой — залил большую фотку в контент, она сначала уменьшилась плагином что выше, затем эту картину в контенте уменьшил раза в три — хотелось бы, чтобы на выходе была картинка нужных размером, а совсем хорошо, если еще на нее поставлена ссылка на большую картинку (сверху навешиваем fancybox). написать в принципе несложно (кстати актуально вообще?), но может есть уже готовое?
bezumkin.ru/sections/components/118/, не завелось — не поддерживает источники файлов.
Есть ли готовое готовое проверенное решение для этого дела? А пока свой велосипед с поддержкой источников (переписал по ссылке выше).
Должен быть установлен phpThumbOn.
Подписываем на событие OnFileManagerUpload, приоритет -1 (должен срабатывать раньше, чем fileTranslit )
Параметр phpthumb_config — json строка с параметрами
{"w":1400,"h":1200,"zc":0,"far":0,"q":95}
<?php
/**
* ResizeOnUpload Plugin
*
* Events: OnFileManagerUpload
* Author: Andrey Korobkov <i@nonic.ru>
* Required: PhpThumbOn snippet for resizing images
* Param: string $phpthumb_config default {"w":1400,"h":1200,"zc":0,"far":0,"q":95}
*/
if ($modx->event->name != 'OnFileManagerUpload') {return;}
$config = array(
'w' => 1400,
'h' => 1200,
'zc' => 0,
'far' => 0,
'q' => 95
);
if(!isset($files) || !is_array($files) || !isset($source)){
return;
}
if(isset($scriptProperties["phpthumb_config"]) && !empty($scriptProperties["phpthumb_config"])){
$propConfig = $modx->fromJSON($scriptProperties["phpthumb_config"]);
if(is_array($propConfig)){
$config = array_merge($config, $propConfig);
}
}
$extensions = array_map("trim", explode(',', $modx->getOption('upload_images')));
$basePath = rtrim($source->getBasePath(), "/") . "/";
$baseUrl = trim($source->getBaseUrl(), "/") . "/";
$directory = trim($directory, "/") . "/";
$basePath = str_replace("//", "/", $basePath . $directory);
$baseUrl = str_replace("//", "/", $baseUrl . $directory);
$phpThumbOnProps = array(
"assetsPath" => $modx->getOption('base_path'),
"assetsUrl" => $modx->getOption('base_url'),
"cacheDir" => $modx->getOption('assets_path') . "cache_img_mgr",
"noimage" => ""
);
$componentPath = (string)$modx->getOption('phpthumbon.core_path', null, $modx->getOption('core_path').'components/phpthumbon/');
$phpThumbOn = $modx->getService("phpthumbon", "phpThumbOn", $componentPath.'model/phpthumbon/', $phpThumbOnProps);
if(!($phpThumbOn instanceof phpThumbOn)){
return;
}
foreach($files as $file){
if ($file['error'] != 0) {
continue;
}
$name = $file['name'];
$fileBasePath = $basePath . $name;
$fileBaseUrl = $baseUrl . $name;
$ext = strtolower(array_pop(explode(".", $name)));
if (in_array($ext, $extensions)) {
$sizes = getimagesize($fileBasePath);
$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];
}
$phpThumbOnProps["input"] = $fileBaseUrl;
$phpThumbOnProps["options"] = $config;
$resized = $phpThumbOn->run($phpThumbOnProps);
if(!empty($resized)){
rename(MODX_BASE_PATH . trim($resized, "/"), $fileBasePath);
}
}
}
}
И еще вопрос — есть ли готовое решения для ресайза картинок из контента на лету?
Т.е. алгоритм такой — залил большую фотку в контент, она сначала уменьшилась плагином что выше, затем эту картину в контенте уменьшил раза в три — хотелось бы, чтобы на выходе была картинка нужных размером, а совсем хорошо, если еще на нее поставлена ссылка на большую картинку (сверху навешиваем fancybox). написать в принципе несложно (кстати актуально вообще?), но может есть уже готовое?
Комментарии: 3
По последнему абзацу DirectResize2 есть
Надо будет попробовать.
Оказывается есть ResizeImageOnUpload — в описании DirectResize2 ссылочка на него! Не знал, попробовал — работает.
Оказывается есть ResizeImageOnUpload — в описании DirectResize2 ссылочка на него! Не знал, попробовал — работает.
В компонент UserFiles встроено.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.