ms2gallery Ресайз исходных изображений на сервере

Всем привет. Публикую «велосипед» по ресайзу исходных изображений на сервере в момент загрузки (без участия plupload, который имеет всякие недостатки).

Этот код валиден для версии ms2gallery 1.3.3-pl, сейчас версия 1.5.0 — и там похоже здорово рефакторили код.
Код для ресайза можно найти по ссылке:
gist.github.com/soulcreate/c45dbb700bfd3ded0e5b
вставляем в процессор core/components/ms2gallery/processors/mgr/gallery/upload.class.php
между
$this->mediaSource->createContainer($product_file->path, '/');
и
$file = $this->mediaSource->createObject(
это для версии ms2gallery 1.3.3-pl
Соответственно в настройках источника файлов галереи изменяем параметры
maxUploadWidth
maxUploadHeight
maxUploadSize
по-максимуму, чтобы не задействовать ресайз на клиенте с помощью plupload'а.
PS: Известные недостатки:
В админке в галереи будет отображаться иходный размер изображения (загруженного), поскольку он считается на клиенте, в момент загрузки, и в процессе ресайза не корректируется.
Алексей
10 октября 2015, 14:11
modx.pro
2
2 570
-1

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

Василий Наумкин
10 октября 2015, 17:55
+3
Налицо явное непонимание логики работы компонента.

Оригинальное изображение нужно, чтобы генерировать из него все остальные. Оно не должно пережиматься в принципе — это оригинал.

Но на случай, если пользователь очень далёк от компьютера и пытается загружать 20 мегапиксельные фотки, они пережимаются предварительно на клиенте, чтобы сэкономить время и трафик.
Чтобы не грузить фотки по 10 мегабайт, они пережимаются, предположим, до 1 мегабайта (или какое там указано в настройках максимальное разрешение).

В чём смысл пережатия уже загруженного на сервере 20мп-оригинала я не знаю.
    Алексей
    10 октября 2015, 18:24
    0
    смысл в том, что на сервере (с помощью специализированной библиотеки GD) изображение прежимается куда качественней, чем на клиенте (с помощью plupload). всего-то. Но это актуально для версии ms2gallery 1.3.3-pl, не знаю как в новой версии 1.5.0.
      Василий Наумкин
      10 октября 2015, 20:22
      0
      Если непонятен мой вопрос, повторяю еще раз: зачем пережимать уже загруженный оригинал?

      Ресайз на клиенте нужен для экономии времени и трафика, а что экономит пережимка на сервере?
      Если нужно мега-качество, то просто отключи пережимку на клиенте.
        Павел Гвоздь
        10 октября 2015, 21:28
        +2
        Согласен. В этом и фишка этого плаплоада, чтобы заказчику отдав сайт не пришлось рассказывать ещё и о том, что перед загрузкой фотки, ему придется её ужать средствами какого-нибудь Фотошопа. Этим меня и привлекает компонент ms2Gallery. Хотя… не только этим…
          Алексей
          10 октября 2015, 21:50
          0
          все это очень странно, но у меня складывается впечатление, что только меня не устраивает качество пережимки plupload. Хотя в интернетах натыкался на подобные же недочеты в работе plupload. Раз всех устраивает, подскажите, какой браузер нужен, чтобы plupload нормально пережимал изображения, или какие другие рекомендации?
            Павел Гвоздь
            10 октября 2015, 21:55
            +1
            Я в своё время решил выбрать удобство вопреки качеству. Советовать забить и ждать лучшего инструмента, который делал бы всё то + по качеству не подводил, я думаю не имеет смысла. Каждый руководствуется своими соображениями. Однако моя рекомендация именно в этом.
              Василий Наумкин
              11 октября 2015, 05:00
              +1
              Да, у меня складывается ровно такое же впечатление, потому что кроме тебя больше этот вопрос никто не поднимает.

              Моё личное мнение, что если тебе настолько важно качество и размер фотографий, то лучше подготовить файлы самостоятельно, а не швырять всё подряд с iPhone и надеяться на лучшее.

              Как пример могу привести сайт немецкой фотостудии, где все фотографии готовятся к публикации в Photoshop и больше не пережимаются. Там даже некоторые превью потом заменяют вручную, если они неудачно обрезаны.
              Алексей
              10 октября 2015, 22:16
              0
              Если непонятен мой вопрос, повторяю еще раз: зачем пережимать уже загруженный оригинал?
              Для экономии места на хостинге, особенно когда загружают фотки по 20-25Мб, а для сайта достаточно разрешения 800х600.
              Ресайз на клиенте нужен для экономии времени и трафика, а что экономит пережимка на сервере?
              Пережимка на сервере ничего не экономит, но она сохраняет качество изображения
              Если нужно мега-качество, то просто отключи пережимку на клиенте.
              Мега-качество вовсе не нужно. Достаточно обычного разрешения 800х600.

              К примеру если пережимать фотки с последнего айфона через plupload, то он пипец что с ними делает.
          Алексей
          14 октября 2015, 09:58
          0
          Недавно обнаружил, что просто добавляя условие
          $id = $this->getProperty('id', @$_GET['id']);
          	if (!$resource = $this->modx->getObject('modResource', $id)) {
          		return $this->modx->lexicon('ms2gallery_err_no_resource');
          	}
          if ($resource->template == 6) { 
          $options = [
          	//'w' => 120,
          	'h' => 600,
          	'q' => 90,
          	'f' => 'jpg'
          ];
          }
          можно для разных шаблонов ресурсов делать разные размеры исходных изображений.
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            9