Генерация превью в формате webp для miniShop2

С приходом поддержки webp в MODX участились вопросы о возможности генерации превью товаров miniShop2 в этом формате. По началу казалось что все должно работать из коробки, но на практике этого нет.
Причиной оказалось отсутствие расширения webp в источнике файлов MS2 и в двух системных настройках ('upload_files','upload_images').

Для ленивых написал небольшой скрипт (запускать в консоли), который поможет решить эту задачу:

foreach (['upload_files','upload_images'] as $option){
    if($setting = $modx->getObject('modSystemSetting',['key'=>$option])){ 
        $extensions = explode(',',$setting->get('value'));
        if(!in_array('webp',$extensions)){
            $extensions[] = 'webp';
            $setting->set('value',implode(',',$extensions));
            $setting->save(); 
        } 
    }
}
$ms2images  = 2; // ID источника miniShop2
$source = $modx->getObject('modMediaSource',$ms2images);
$props = $source->get('properties');
$props['thumbnailType']['options'][] = ['text'=>'webp','value'=>'webp']; 
$props['imageExtensions']['value'] .= ',webp';
$props['allowedFileTypes']['value'] .= ',webp';
$source->set('properties',$props);
$source->save();
PG
PG
14 марта 2019, 06:57
modx.pro
16
4 700
+11
Поблагодарить автора Отправить деньги

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

Андрей Степаненко
14 марта 2019, 10:34
0
Можно еще вот так(если через плагины):
switch ($event->name) {
    case 'OnMediaSourceGetProperties':
        // Автоматчиски убирает наложение водяного знака на фотографию
        if (isset($scriptProperties['properties'])) {
            $properties = $this->modx->fromJSON($scriptProperties['properties']);
            if ($properties['basePath']['value'] == 'assets/images/products/') {
                $props['thumbnailType']['options'][] = ['text'=>'webp','value'=>'webp'];
                $props['imageExtensions']['value'] .= ',webp';
                $props['allowedFileTypes']['value'] .= ',webp';
                $this->modx->event->output($this->modx->toJson($props));
                return $properties;
            }

        }
        break;
}
    PG
    PG
    14 марта 2019, 10:45
    0
    Предложенный мною вариант один раз запишет данные куда нужно.
    Не совсем понимаю для чего делать эти манипуляции при каждом обращении к источникам.
    Тем более что уже отправлен PR и в дальнейшем эта штука будет работать из коробки
      Андрей Степаненко
      14 марта 2019, 10:46
      0
      А через источники файлов разве нельзя указать это?
        PG
        PG
        14 марта 2019, 10:47
        0
        Это можно
        $props['imageExtensions']['value'] .= ',webp';
        $props['allowedFileTypes']['value'] .= ',webp';
        Это нет
        $props['thumbnailType']['options'][] = ['text'=>'webp','value'=>'webp'];
          Андрей Степаненко
          14 марта 2019, 10:49
          +3
            PG
            PG
            14 марта 2019, 10:52
            +1
            Вот это новость
            за столько лет работы с MODX это окно ни разу не видел

            Век живи — век учись.
              Андрей Степаненко
              14 марта 2019, 10:54
              +1
              Я если честно сам только узнал об этом))))))))))))))
                Эдвард Ерохин
                18 марта 2019, 14:28
                0
                ребят, подскажите все выставил как надо… ошибку дает «1.webp: Файл не является корректным изображением.»
                prntscr.com/mzfq6c
                Куда копать?
                  Андрей Степаненко
                  18 марта 2019, 14:31
                  0
                  Не подскажу) не пробовал
                    PG
                    PG
                    18 марта 2019, 14:51
                    0
                    проверил у себя, получается что пока по непонятным причинам картинки из webp не получается конвертировать. Но такой ошибки не наблюдаю, вероятно у тебя проблема с самой картинкой
      Эдвард Ерохин
      14 марта 2019, 16:07
      0
      последний modx, и последний minishop2 при загрузке webp изображения в карточку товара говорит неправильный файл, а при перегенерации из jpg вообще убивает файлы. Что я делаю не так?)
        Максим
        15 марта 2019, 23:23
        0
        А никто не знает, почему phpthumbon webp генерирует иногда просто пустым изображением?
        Попробовал в каталоге запустить половина изображений нормально, о половина просто пустое фото.
        В настройках указал только ширину, высоту и f=webp.
        Ни у кого такого не было?
          Андрей Степаненко
          20 марта 2019, 10:43
          0
          А что на счет скорости генерации превью, webp быстрее генерируется?
            Максим
            26 июня 2019, 15:45
            0
            А он точно генерирует в webp, а не в jpg?
            Сделал всё как тут написано. Ради интереса генерировал сначала в jpg, а потом в webp один и тот же файл.
            Размер одинаковый.
            Может система, видя неизвестный формат, по-умолчанию в jpg генерирует и просто меняет расширение на webp?
            Просто даже судя по caniuse мой IE11 и iOS7 не должны понимать webp, но они его отображают как надо!
              Василий Наумкин
              26 июня 2019, 16:46
              1
              +1
              Должен еще и хостинг это поддерживать.

              Я на modhost.pro специально собирал ImageMagick 7 с поддержкой webp.
                Максим
                26 июня 2019, 17:10
                +1
                Действительно.
                array(12) {
                  ["GD Version"]=> string(26) "bundled (2.1.0 compatible)"
                  ["FreeType Support"]=> bool(true)
                  ["FreeType Linkage"]=> string(13) "with freetype"
                  ["GIF Read Support"]=> bool(true)
                  ["GIF Create Support"]=> bool(true)
                  ["JPEG Support"]=> bool(true)
                  ["PNG Support"]=> bool(true)
                  ["WBMP Support"]=> bool(true)
                  ["XPM Support"]=> bool(true)
                  ["XBM Support"]=> bool(true)
                  ["WebP Support"]=> bool(false)
                  ["JIS-mapped Japanese Font Support"]=> bool(false)
                }
              Андрей
              28 августа 2020, 12:06
              0
              на сервере присутствует поддержка webp в модуле GD, но почему-то фотки не генерируются в этот формат, папка пустая получается на хостинге. Подскажите как наладить?
                Алексей
                25 февраля 2022, 17:32
                0
                Подскажите плз, почему у мня превью в каталоге не видно в свежесозданном сайте на новых версиях минишопа и модх.

                сами превьюшки 100% генерируются и в jpg и в web, при загрузке картинки в галерею товара?
                они появляются в assets/images/products и в источнике файлов MS2Images

                в tpl.msProducts.row этот $thumb не видит, показывает дефолтные small…

                <a href="{$id | url}">
                                {if $thumb?}
                                    <img src="{$thumb}" alt="{$pagetitle}" title="{$pagetitle}" itemprop="image"/>
                                {else}
                                    <img src="{'assets_url' | option}components/minishop2/img/web/ms2_small.png"
                                        srcset="{'assets_url' | option}components/minishop2/img/web/ms2_small@2x.png 2x"
                                        class="mw-100" alt="{$pagetitle}" title="{$pagetitle}"/>
                                {/if}
                            </a>
                Тег [[++url]] ссылку на главную страницу, поэтому заменил на {$id | url}
                <a href="[[++url]]">
                                {if $thumb?}
                                    <img src="{$thumb}" class="mw-100" alt="{$pagetitle}" title="{$pagetitle}" itemprop="image"/>
                                {else}
                                    <img src="{'assets_url' | option}components/minishop2/img/web/ms2_small.png"
                                        srcset="{'assets_url' | option}components/minishop2/img/web/ms2_small@2x.png 2x"
                                        class="mw-100" alt="{$pagetitle}" title="{$pagetitle}"/>
                                {/if}
                            </a>
                  Алексей
                  25 февраля 2022, 18:24
                  0
                  Разобрался отменно в настройках, и частично решил мой вопросе.
                  в шаблоне категорий не было &includeThumbs=`120x90`,
                  и в чанке убрал {if $thumb?} и {else}…
                  оставил только это. Теперь работает.
                  <img src="[[+120x90]]" class="mw-100" alt="{$pagetitle}" title="{$pagetitle}" itemprop="image"/>
                  Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                  19