Решение для ресайза картинок при загрузке?

Извечная проблема — клиенты порой загружают очень большие фотографии. Нашел такое решение:
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). написать в принципе несложно (кстати актуально вообще?), но может есть уже готовое?
Андрей Коробков
05 февраля 2017, 12:55
modx.pro
2
2 165
-1

Комментарии: 3

Алексей Ерохин
05 февраля 2017, 16:17
+1
По последнему абзацу DirectResize2 есть
    Андрей Коробков
    05 февраля 2017, 16:34
    0
    Надо будет попробовать.
    Оказывается есть ResizeImageOnUpload — в описании DirectResize2 ссылочка на него! Не знал, попробовал — работает.
    Виктор
    06 февраля 2017, 13:09
    0
    В компонент UserFiles встроено.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      3