[tinyCompressor] Автоматическая оптимизация и сжатие файлов

Что делает данный компонент?
Оптимизация изображения для сайта — это уменьшение объема изображения без видимой потери качества.
При загрузке файла через файловый менеджер, ТВ-поле в ресурсе файла изображения (jpg/png) и при создании превью изображения — он автоматически его оптимизирует.

Сжатие PDF-файлов — уменьшает размер загружаемых PDF-файлов через файловый менеджер, ТВ-поле.

Все работает в автоматическом режиме. Перед использованием посмотрите системные настройки компонента. По умолчанию, включено только сжатие превью. Для изображений размером менее 5MB указывать ключ к сервису TinyPNG не нужно.

Что использует?
Для оптимизации изображения используется доработанный API-компонент к сервису TinyPNG. Компонент позволяет бесплатно и без учета загружать изображения размером до 5MB. Для использования загрузки на большие размеры, придется получить ключ к API на сайте сервиса.

Для сжатия PDF-файлов используется API-компонент к сервису ILovePDF. Для использования необходимо получить ID-проекта и секретный ключ в личном кабинете сервиса.

Интеграция:
  • Проведена интеграция в minishop2 (msGallery)
  • Проведена интеграция в phpThumb (phpThumbOn/phpThumbOf)
  • Проведена интеграция в MIGX
Пакет на modstore.ru
Проект на GitHub.com
Alexey Medvedev
Alexey Medvedev
11 декабря 2017, 00:37
modx.pro
11 064

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

Баха Волков
10 декабря 2017, 22:58
После загрузки, получаю Internal Server Error
    Alexey Medvedev
    10 декабря 2017, 23:11
    Исправьте в плагине tinyCompressor.

    if ( $this->modx->getOption('tinycompressor_tinypng_thumb_enable', $config,true)
    на
    if ( $modx->getOption('tinycompressor_tinypng_thumb_enable', $config,true)
      Alexey Medvedev
      10 декабря 2017, 23:42
      Компонент временно отключен
        Баха Волков
        10 декабря 2017, 23:55
        К сожалению, все равно выдают выше упомянутую ошибку

        Кстати:
        Modx 2.5.8-pl
        Php 5.6
          Alexey Medvedev
          11 декабря 2017, 03:38
          Вроде, всё протестировал. Теперь должно работать. Вот, что значит спешка — вместо обращения к массиву, сделал функцию :(
            Баха Волков
            11 декабря 2017, 07:51
            Теперь ошибка «У веб-сервера не хватает прав для обновления каталога.» Что это может быть, подскажите пожалуйста
              Alexey Medvedev
              11 декабря 2017, 08:01
              Попробуйте загрузить на сервер файл с именем 1.jpg
                Баха Волков
                11 декабря 2017, 11:12
                Загрузил, все работает. И видимо понял в чем проблема была: расширение было JPG, т.е. заглавными буквами

                UPD: Хотя нет, Вот такое название не прокатило: «DSC04858.jpg»

                А когда переименовал, то все нормально
                  Alexey Medvedev
                  11 декабря 2017, 11:21
                  Посмотрите имя файла у загруженного экземпляра, скорее всего оно dsc04858.jpg
                    Баха Волков
                    11 декабря 2017, 11:34
                    Нет, он выдает ошибку «У веб-сервера не хватает прав для обновления каталога» а файл загружается, но без сжатия

                    Вот скрин
                      Alexey Medvedev
                      11 декабря 2017, 11:49
                      Ошибка происходит при переименовании файла через source компонент. Все файлы приводятся транслитерируются и приводятся к нижнему регистру. А у Вас с правами какие-то сложности. Попробуйте загрузить тот-же файл в корень сайта.
                        Станислав
                        06 февраля 2018, 16:09
                        Здравствуйте, та же ошибка и тоже изза имени. Если в имени есть символ _, то выдается ошибка «У веб-сервера не хватает прав для обновления каталога». Например test_n, однако же если символ убрать, testn, файл загрузится и сожмется. Это никак нельзя обойти? вроде ж не регистр :-(
    UDAV
    11 декабря 2017, 09:51
    Супер! Я правильно понимаю, что компонент нужно только установить и все будет работать? Или надо через него картинки выводить? И можно ли менять уровень оптимизации?
      Alexey Medvedev
      11 декабря 2017, 10:15
      Всё верно, только в настройки зайдите. По умолчанию, включена оптимизация только для превью. Уровень оптимизации доступен, пока, только для pdf-файлов.
      Илья Уткин
      11 декабря 2017, 14:48
      Блин, очень крутая фишка «внедриться» в процесс создания превьюшек PhpThumb'ом)
        Илья Уткин
        11 декабря 2017, 14:52
        А, нет, не очень. Да, такого, события в MODX нет… Не пробовал обновлять MODX? Файл phpthumb.class.php не перезатирается?
          Alexey Medvedev
          11 декабря 2017, 15:06
          Обновлялся до 2.6.0 — затирание не было — обновлял с помощью simpleUpdater. К сожалению, другого варианта на данный момент нет. Поэтому в настройках написано, что это экспериментальная функция.
        v2254303
        11 декабря 2017, 21:52
        Для старых картинок можно применить?
          Alexey Medvedev
          11 декабря 2017, 22:07
          Да, если напишите скрипт для прохода по файлам.
            Alexey Medvedev
            12 декабря 2017, 21:05
            Скрипт для сжатия всех файлов в папке uploads/. Удобнее использовать скрипт в консоле MODX Revo.

            Перед тем как использовать на всем каталоге, попробуйте на папке с небольшим количеством файлов.

            Внимание! Если у Вас слабый или ограниченный сервер или канал, то возможен завершение скрипта по таймауту выполнения, установленного конфигами сервера. Тогда используйте его по папкам, а не сразу огромную папку с 3500 файлов.

            Не забудьте указать ключ к ILovePDF, если планируете сжимать PDF.
            Если хотите сжать превью, то это можно сделать без этого скрипта — удалите их из папки хранения и они создадутся заново уже сжатыми.


            $source = $modx->getObject('sources.modMediaSource', 1);
            $source->initialize();
            function getFilesList($dir, $source)
            {
                $files = [];
                $childrens = $source->getContainerList($dir);
                foreach ($childrens as $container) {
                    if ($container['type'] == 'dir') {
                        $files = array_merge($files, getFilesList($container['pathRelative'], $source));
                        continue;
                    }
                    if ($container['type'] == 'file') {
                        $file_path_info = pathinfo($container['pathRelative']);
                        $ext = strtolower($file_path_info['extension']);
                        if ( in_array($ext, array('jpeg', 'jpg', 'png', 'pdf')) ) {
                
                            if (in_array($ext, array('jpeg', 'jpg', 'png'))) {
                                $type = 'image/jpeg';
                            }
                
                            if ($ext == 'pdf') {
                                $type = 'application/pdf';
                            }
                
                            $file = array(
                                'type'         => $type,
                                'name'         => $file_path_info['basename'],
                                'dir'          => $file_path_info['dirname'],
                                'pathRelative' => $container['pathRelative'],
                                'error'        => 0
                            );
                        
                            $files[] = $file;
                        }
                    }
                }
                return $files;
            }
            $allFiles = getFilesList('uploads/', $source); // Укажите папку вместо 'uploads/'
            $tinyCompressorDefaultPath = MODX_CORE_PATH . 'components/tinycompressor/model/tinycompressor/';
            $compressor = $modx->getService('tinycompressor', 'tinyCompressor', $tinyCompressorDefaultPath);
            foreach ($allFiles as $file) {
            	/**
            	* function compression($objects, $container, $source = null)
            	* @var modMediaSource $source
                    * @var array $objects
                    * @var string $container
            	**/
            	$compressor->compression($file, $file['dir']); //source не ставить, иначе рискуете потерять связи, так как будет переименование файла
            }
              Димыч
              04 января 2018, 23:46
              Запускаю из консоли, в папке 1 файл…

              [2018-01-04 23:38:33] (DEBUG @ .../core/model/modx/modlexicon.class.php : 417)
              Language string not found: "file_download"
              [2018-01-04 23:38:33] (DEBUG @ .../core/model/modx/modlexicon.class.php : 417)
              Language string not found: "file_remove"
              [2018-01-04 23:38:33] (WARN @ .../core/xpdo/xpdo.class.php : 543)
              Could not load package metadata for package tinycompressor.
              [2018-01-04 23:38:33] (ERROR @ .../core/components/tinycompressor/model/tinycompressor/tinycompressor.class.php : 98)
              PHP warning: Illegal string offset 'name'
              [2018-01-04 23:38:33] (ERROR @ .../core/components/tinycompressor/model/tinycompressor/tinycompressor.class.php : 100)
              PHP warning: Illegal string offset 'error'
              [2018-01-04 23:38:33] (ERROR @ .../core/components/tinycompressor/model/tinycompressor/tinycompressor.class.php : 105)
              PHP warning: Illegal string offset 'type'
              ...
                Alexey Medvedev
                09 января 2018, 02:47
                Дмитрий, Вы решили проблему? Если нет, то свяжитесь со мной через профиль.
                  Станислав
                  03 февраля 2018, 03:22
                  Здравствуйте, так же в ошибках, а так же
                  2018-02-03 03:20:45] (WARN @ /core/xpdo/xpdo.class.php : 543)
                  Could not load package metadata for package tinycompressor.
                  
                  Warning: Illegal string offset 'name' in /core/components/tinycompressor/model/tinycompressor/tinycompressor.class.php on line 98
                  
                  Warning: Illegal string offset 'error' in /core/components/tinycompressor/model/tinycompressor/tinycompressor.class.php on line 100
                  
                  Warning: Illegal string offset 'type' in /core/components/tinycompressor/model/tinycompressor/tinycompressor.class.php on line 105
                    Alexey Medvedev
                    17 марта 2018, 17:54
                    Благодарю Павла за доступ к сайту для устранения проблемы.

                    // Обратите внимание, что прописано в параметре basePath источника файла
                    $source = $modx->getObject('sources.modMediaSource', 1); 
                    $source->initialize();
                    function getFilesList($dir, $source)
                    {
                        $files = [];
                        $childrens = $source->getContainerList($dir);
                        foreach ($childrens as $container) {
                            if ($container['type'] == 'dir') {
                                $files = array_merge($files, getFilesList($container['pathRelative'], $source));
                                continue;
                            }
                            if ($container['type'] == 'file') {
                                $file_path_info = pathinfo($container['pathRelative']);
                                $ext = strtolower($file_path_info['extension']);
                                if ( in_array($ext, array('jpeg', 'jpg', 'png', 'pdf')) ) {
                        
                                    if (in_array($ext, array('jpeg', 'jpg', 'png'))) {
                                        $type = 'image/jpeg';
                                    }
                        
                                    if ($ext == 'pdf') {
                                        $type = 'application/pdf';
                                    }
                        
                                    $file = array(
                                        'type'         => $type,
                                        'name'         => $file_path_info['basename'],
                                        'dir'          => $file_path_info['dirname'],
                                        'pathRelative' => $container['pathRelative'],
                                        'error'        => 0
                                    );
                                
                                    $files[] = $file;
                                }
                            }
                        }
                        return $files;
                    }
                    
                    $allFiles = getFilesList('uploads/', $source); // Укажите папку вместо 'uploads/'
                    $tinyCompressorDefaultPath = MODX_CORE_PATH . 'components/tinycompressor/model/tinycompressor/';
                    
                    $compressor = $modx->getService('tinycompressor', 'tinyCompressor', $tinyCompressorDefaultPath);
                    foreach ($allFiles as $file) {
                    	$data = array($file); // Передавать надо массив
                    	// Если "Источник файла" (Source) не является корнем сайта, 
                    	// то явно укажите это перед переменной $file['dir'], иначе файл не будет найден. 
                    	// Например, 'assets/' . $file['dir'] . '/'
                    	$compressor->compression($data, $file['dir'] . '/'); //source не ставить, иначе рискуете потерять связи, так как будет переименование файла 
                    }
                  Alexey Medvedev
                  17 марта 2018, 17:57
                  Чуть выше, есть решение.
              Димыч
              12 декабря 2017, 22:23
              Алексей, а к ms2Gallery можно ваш чудесный компонент прикрутить? )
                Alexey Medvedev
                12 декабря 2017, 23:01
                Интеграцию проводил ещё в прошлой версии, если Василий ничего не менял в компоненте, то должно работать :) Попробуйте, если будут проблемы или не будет сжимать, пишите — посмотрю, что можно сделать.
                  Димыч
                  12 декабря 2017, 23:25
                  Вроде не работает. Вручную через сайт заметно меньше получаются фото.
                  Настройка tinycompressor_tinypng_upload_enable включена.
                    Alexey Medvedev
                    13 декабря 2017, 20:06
                    Хорошо, буду посвободнее посмотрю.
                      Дмитрий
                      06 января 2018, 16:40
                      Алексей, благодарю за отличный компонент!

                      Интеграция с галереей ms2Gallery была бы очень кстати. Скажите, пожалуйста, когда планируете реализовать? Готов спонсировать! Сообщите, пожалуйста, по стоимости доработки.
                        Alexey Medvedev
                        09 января 2018, 02:45
                        Приношу извинения за ожидания.
                        Дмитрий, интеграция с ms2Gallery стоит в списке задач. Пока по срокам с ориентировать не могу. Конец года был очень напряженным и сытным на работу. До 29 января у меня всё расписано, к сожалению. Если появится свободное время, то постараюсь реализовать эту функцию. Компонент ms2Gallery является проприетарным(платным) попрошу у Василия часть кода загрузки изображений или хотя бы описание его работы.
              Сергей Самусев
              24 декабря 2017, 13:53
              Есть ли возможность интегрировать компонент с Gallery?
                Alexey Medvedev
                24 декабря 2017, 20:43
                Должно работать, попробуйте загрузить фотографию и просмотрите изменился ли размер.
                  Сергей Самусев
                  24 декабря 2017, 20:48
                  Я тоже так думал… пробовал. файл загрузился того же размера.
                    Alexey Medvedev
                    24 декабря 2017, 20:55
                    Хорошо. Я посмотрю. Ждите обновления.
                      Дмитрий
                      05 октября 2018, 19:24
                      А у меня вообще не работает. Загрузка происходит вроде, но превьюшка в альбоме белая и вообще не открывается.
                      Полная картинка тоже.
                      prntscr.com/l2mb94
                Avaz
                24 декабря 2017, 19:49
                Fatal error: Can't use function return value in write context in /var/www/100review/data/www/make-eat.ru/core/components/tinycompressor/model/tinycompressor/tinycompressor.class.php on line 270\
                такая ошибка выходит после установке в установщике? помогите
                  Alexey Medvedev
                  24 декабря 2017, 20:54
                  Два выхода из ситуации:
                  1. Дождитесь обновления — ошибка будет устранена.
                  2. Внесите изменения в указанный файл заменив строку 270
                  $this->tinyPNGClient = (empty(trim($this->config['tinyPNGApiKey'])) ) ? false : new Tinify\Client($this->config['tinyPNGApiKey']);
                  на
                  $tinyPNGApiKey =trim($this->config['tinyPNGApiKey']);
                  $this->tinyPNGClient = ( empty($tinyPNGApiKey) ) ? false : new Tinify\Client($tinyPNGApiKey);
                  И строку 277
                  $this->iLovePDF = (empty(trim($this->config['iLovePDFProjectID'])) || empty(trim($this->config['iLovePDFProjectKey'])) ) ? false : new Ilovepdf\Ilovepdf($this->config['iLovePDFProjectID'], $this->config['iLovePDFProjectKey']);
                  на
                  $iLovePDFProjectID = trim($this->config['iLovePDFProjectID']);
                  $iLovePDFProjectKey = trim($this->config['iLovePDFProjectKey']);
                  $this->iLovePDF = (empty($iLovePDFProjectID) || empty($iLovePDFProjectKey) ) ? false : new Ilovepdf\Ilovepdf($this->config['iLovePDFProjectID'], $this->config['iLovePDFProjectKey']);
                  Klike
                  15 января 2018, 11:47
                  Спасибо за полезный компонент!
                  Столкнулся с такой штукой: стоит компонент FastUploadTV, в источнике файлов так:
                  В настройках TV так:


                  Так выводит ошибку – не может найти файл. Если дополнить строку ~124 tinycompressor.class.php
                  $sourceFilePath = $basePath  . $file['name'];
                  на такую:
                  $sourceFilePath = $basePath . $container . $file['name'];
                  То всё хорошо.

                  Либо в плагине перед ~13 строкой
                  $compressor->compression($files, $directory, $source);
                  добавить строчку (не уверен в корректности, но вроде)
                  $directory = $source->getBases($directory)['path'] . $directory;
                    Alexey Medvedev
                    15 января 2018, 13:09
                    В FastUploads стоит в плагине переименование файла. Если Вы отключите переименование файла в настройках компонента. Проблем быть не должно.
                    Игорь
                    16 мая 2018, 11:27
                    А можно настроить степень сжатия. Просто он выдает файлы по 1,5 мб. а сам тини на сайте может сжать их до 200-400 кб
                      Alexey Medvedev
                      17 мая 2018, 11:42
                      Степень сжатия изменить нельзя. Так как компонент работает в режиме эмуляции загрузки через сайт tinypng.com. Скорее всего у Вас ничего не сжимается, т.к. происходит ошибка поиска файла на сервере. Посмотрите error.log сайта.
                      Nick
                      24 июня 2018, 20:43
                      После установки компонента перестали подгружаться фотографии в minishop. Компонент удалил, но это ничего не изменило. Даже после удаления компонента в логах ошибки:
                      [2018-06-24 20:37:07] (ERROR @ /www/core/xpdo/xpdo.class.php : 644) Could not load class: tinyCompressor from tinycompressor.
                      [2018-06-24 20:37:07] (ERROR @ /www/core/xpdo/xpdo.class.php : 1247) Problem getting service tinycompressor, instance of class tinyCompressor, from path www/core/components/tinycompressor/model/tinycompressor/
                      Подскажите, что можно сделать?
                        Alexey Medvedev
                        25 июня 2018, 14:21
                        Поищите плагин tinyCompressor и удалите его.
                          Nick
                          25 июня 2018, 16:26
                          Спасибо.Сначала не понял о чем Вы. Плагин удалил, помогло!
                        Павел
                        30 июня 2018, 17:32
                        Здравствуйте. Поставил компонент, но степень сжатия файлов изображений (ms2Gallery-1.4.8 и minishop2-2.2.0) не поменялась ни на 1 байт, такое впечатление, что изображения по прежнему сжимает PhpThumb. В лог-файле ошибок нет. Можете посоветовать, как это исправить?
                          Alexey Medvedev
                          30 июня 2018, 18:44
                          Здравствуйте.

                          1. Проверьте наличие строки в файле /core/model/phpthumb/phpthumb.class.php'
                          $this->modx->invokeEvent('OnPhpThumbRenderToFile', array('filename' => $renderfilename));
                          2. Очистите кэш изображений ms2Gallery.
                          3. Включите сжатие при загрузке в настройках.
                            Павел
                            30 июня 2018, 21:32
                            1. Наличие строки в файле проверял, она была изначально, без моего вмешательства.
                            3. Пробовал и со сжатием и без него (для меня важны хорошо сжатые превью, сжатие самого загружаемого файла значение не имеет).
                            2. Что такое кэш изображений и как его очистить — не знаю. Пробовал следующим образом: удалял конкретное фото из галареи и загружал его заново.
                            Сейчас пробовал из консоли запускать скрипт для перегенерации изображений ms2Gallery, выдал следующую ошибку:
                            /www/data/site.ru/core/model/modx/modx.class.php : 1611)
                            
                            [OnFileManagerFileCreate]
                            [2018-06-30 23:17:42] (ERROR @ /var/www/data/site.ru/core/components/tinycompressor/model/tinycompressor/tinycompressor.class.php : 180)
                            
                            Ошибка сжатия (файл не найден): /var/www/data/site.ru//var/www/data/site.ru/assets/images/resources/10/foto.jpg
                            где-то путь сбивается и дважды друг на друга накладывается. До установки tinycompressor скрипт работал. Подскажите, где искать ошибку с путём?

                              Alexey Medvedev
                              01 июля 2018, 15:48
                              Варианты:
                              1. Попробуйте не генерировать превью через скрипт, а просто загрузить страницу. Не забудьте очистить кэш превью.
                              2. Закомментируйте строчки 132-150 кода в файле /var/www/data/site.ru/core/components/tinycompressor/model/tinycompressor/tinycompressor.class.php. Это строчки переименования файла.
                                Павел
                                01 июля 2018, 16:06
                                Спасибо. Проблема решилась изменением кода в строке 98 файла /var/www/data/site.ru/core/components/tinycompressor/model/tinycompressor/tinycompressor.class.php
                                вместо
                                $path = $this->modx->getOption('base_path') . $container .$file['name'];
                                сделал
                                $path = $container . '/' .$file['name'];
                                теперь приложение заработало. Остались ещё конфликты между разными источниками картинок MS2 Images и MS2Gallery Images если в них указаны разные размеры превью, то используются только MS2Gallery Images. Буду разбираться.
                                  Евгений
                                  02 ноября 2018, 15:39
                                  Спасибо. Та же самая история была. Теперь все заработало, всему виной строка 98.
                                  P.S.: использую ms2Gallery 2.0.6-pl
                              Павел
                              01 июля 2018, 08:07
                              PS. Забыл приложить ссылку на скрипт
                            ru_smc
                            23 июля 2018, 18:21
                            Что-то не догоняю я как он работает. Установил, в настройках указал «Да» в пункте Сжимать загружаемые изображения. Картинки как загружались, так же и загружаются с исходным размером.
                            Или я что-то не так сделал?
                              Alexey Medvedev
                              23 июля 2018, 19:13
                              Если размер изображения более 5 МБ, то нужен ключ для tinyPNG. Посмотрите лог modx и php на наличие ошибок.
                              Max
                              Max
                              27 июля 2018, 15:47
                              (ERROR @ /home/s13783/www/core/components/tinycompressor/model/tinycompressor/tinycompressor.class.php: 180) Ошибка сжатия (файл не найден): /home/s13783/www//home/s13783/www/assets/userfiles/ads/bazads/3041-6f6ebfb18532b74e69991e1ab4f9298cb3189e6f-120x90.png

                              При загрузке последней картинки создалась папка (304) /ads/bazads/304 в которой лежит картинка, а компрессор ищет файл в /bazads/. Если я правильно понимаю, не хватает после 304 /. Как это исправить?
                                Max
                                Max
                                27 июля 2018, 23:46
                                Решили вопрос
                                Александр Туниеков
                                12 августа 2018, 21:08
                                У меня при загрузке в ms2Gallery картинки не загружались. Поправил следующим образом.
                                В файле core/components/tinycompressor/model/tinycompressor/tinycompressor.class.php
                                это
                                function createTinyPNG() {
                                
                                        require_once $this->config['modelPath'] . '/tinycompressor/lib/tinify/init_tinify.php';
                                        $this->tinyPNGClient = (empty(trim($this->config['tinyPNGApiKey'])) ) ? false : new Tinify\Client($this->config['tinyPNGApiKey']);
                                        $this->tinyPNGCrazyClient = new Tinify\CrazyClient();
                                        return true;
                                    }
                                
                                    function createILovePDF()
                                    {
                                        require_once $this->config['modelPath'] . '/tinycompressor/lib/ilovepdf/init_ilovepdf.php';
                                        $this->iLovePDF = (empty(trim($this->config['iLovePDFProjectID'])) || empty(trim($this->config['iLovePDFProjectKey'])) ) ? false : new Ilovepdf\Ilovepdf($this->config['iLovePDFProjectID'], $this->config['iLovePDFProjectKey']);
                                
                                        return true;
                                
                                    }
                                заменил на это
                                function createTinyPNG() {
                                
                                        require_once $this->config['modelPath'] . '/tinycompressor/lib/tinify/init_tinify.php';
                                        $t = trim($this->config['tinyPNGApiKey']);
                                        $this->tinyPNGClient = (empty($t) ) ? false : new Tinify\Client($this->config['tinyPNGApiKey']);
                                        $this->tinyPNGCrazyClient = new Tinify\CrazyClient();
                                        return true;
                                    }
                                
                                    function createILovePDF()
                                    {
                                        require_once $this->config['modelPath'] . '/tinycompressor/lib/ilovepdf/init_ilovepdf.php';
                                        $t1 = trim($this->config['iLovePDFProjectID']);
                                        $t2 = trim($this->config['iLovePDFProjectKey']);
                                        $this->iLovePDF = (empty($t1) || empty($t2) ) ? false : new Ilovepdf\Ilovepdf($this->config['iLovePDFProjectID'], $this->config['iLovePDFProjectKey']);
                                
                                        return true;
                                
                                    }
                                Теперь работает, но сервис после phpTrumbOn картинки меньше не делает.


                                PageSpeed Insights ругается, что картинки можно сжать еще. В итоге компонент мне не подходит. Буду пробовать OptiPic
                                  Alexey Medvedev
                                  12 августа 2018, 22:45
                                  Если вы сжимаете phpThumbOn с большой потерей качества, тут Вам ничего не поможет :)
                                  TinyPNG — это сервис сжатия изображений без видимой потери качества.
                                    Александр Туниеков
                                    12 августа 2018, 22:56
                                    у phpThumbOn качество по умолчанию стоит 0.9 и я его не менял. А вот OptiPic этот же файл сжал на 67%
                                  Игорь
                                  02 мая 2019, 20:47
                                  Здравствуйте. У меня, почему-то не работает интеграция с phpthumbon — т.е. «необрезанная» картинка весит 100kb, после обрезания (соответственно она уже стала меньше по размеру) — 130kb. Никаких специальных настроек для phpthumbon.
                                  Как такое может быть? :)
                                    Alexey Medvedev
                                    02 мая 2019, 21:10
                                    В настройках посмотрите: включена ли функция сжатия превью? Если включена, то проверьте интеграцию в phpThumb — она не очень изящная, но всё же.
                                    В файле /core/model/phpthumb/phpthumb.class.php
                                    Найдите строку:
                                    if (file_put_contents($renderfilename, $this->outputImageData)) {
                                    Если нет ниже неё строки:
                                    $this->modx->invokeEvent('OnPhpThumbRenderToFile', array('filename' => $renderfilename));
                                    Добавьте её. Очистите кэш и попробуйте.
                                    Александр
                                    12 мая 2019, 12:39
                                    Добрый день. Сразу к делу перейду. Хостинг beget.ru, MODX REVO версии 2.7.1.
                                    Установил tinycompressor с функцией сжатия файлов при загрузке. Первое время все работало. Потом нужно было восстановить из бэкапа сайт.

                                    Стал получать ошибку:

                                    ERROR @ .../core/components/tinycompressor/model/tinycompressor/tinycompressor.class.php:180

                                    Вот скрин ошибки в админке:



                                    Права все поменяли на директории и файлы — 775 и 664, соответственно. Ключ tinyPNGApiKey прописан в настройках. Некоторые файлы «проскакивают» и удачно сохраняются в директории оптимизированными, но у большинства — ошибка.

                                    Пробовал установить tinycompressor на «чистой» версии. Такая же ошибка. Подскажите, пожалуйста, как можно решить эту проблему.
                                      Alexey Medvedev
                                      12 мая 2019, 12:48
                                      modx.pro/components/14066#comment-93796

                                      Уже обсуждалась эта проблема.
                                      Закомментируйте строчки 136-150 в файле core/components/tinycompressor/model/tinycompressor/tinycompressor.class.php

                                      /* translate the name of the file */
                                                      $fat = $this->modx->getOption('friendly_alias_translit');
                                                      $friendly_alias_translit = (empty($fat) || $fat == 'none') ? false : true;
                                                      $filename = modResource::filterPathSegment($this->modx, $pathInfo['filename']); //cleanAlias(translate)
                                                      if ($friendly_alias_translit)
                                                      {
                                                          $filename = preg_replace('/[^A-Za-z0-9_-]/', '', $filename); // restrict segment toalphanumeric characters only
                                                      }
                                                      $filename = preg_replace('/-{2,}/','-',$filename); // remove double symbol "-"
                                                      $filename = trim($filename, '-'); // remove first symbol "-"
                                                      $newPath = strtolower($filename . '.' . $pathInfo['extension']);
                                                      if ($newPath !== $file['name']) {
                                                          $path = $basePath . $newPath;
                                                          $source->renameObject($oldPath, $newPath);
                                                      }
                                        Александр
                                        12 мая 2019, 12:52
                                        Спасибо большое, Алексей. Заработало. Странно, вроде просмотрел ответы… Как же решения не нашел?
                                      DeHuCkA
                                      06 июня 2019, 16:19
                                      Добрый день.
                                      Не работает компонент с ms2Gallery в логах пишет
                                      [2019-06-06 16:08:26] (ERROR @ ***/components/tinycompressor/model/tinycompressor/tinycompressor.class.php : 180) 
                                      Ошибка сжатия (файл не найден): ***/assets/images/resources/26/mediumbuildings-1207824-1920.jpg
                                      Нормальный путь должен быть таким /assets/images/resources/26/medium/ buildings-1207824-1920.jpg
                                      Пропускает /
                                        Alexey Medvedev
                                        06 июня 2019, 17:18
                                        Здравствуйте.
                                        Исходное имя файла, которое загружаете через галерею, какое?
                                          DeHuCkA
                                          06 июня 2019, 19:12
                                          Исходное имя файла не меняется после загрузки, в данном примере оно было buildings-1207824-1920.jpg

                                          Я загрузит только что файл 111.jpg получил такой ответ

                                          /core/components/tinycompressor/model/tinycompressor/tinycompressor.class.php : 180) Ошибка сжатия (файл не найден): /assets/images/resources/26111.jpg
                                          [2019-06-06 19:09:25] (ERROR @ /core/components/tinycompressor/model/tinycompressor/tinycompressor.class.php : 180) Ошибка сжатия (файл не найден): /assets/images/resources/26/small111.jpg
                                          [2019-06-06 19:09:26] (ERROR @ core/components/tinycompressor/model/tinycompressor/tinycompressor.class.php : 180) Ошибка сжатия (файл не найден): /assets/images/resources/26/medium111.jpg
                                          http://prntscr.com/nyham9
                                        Дмитрий
                                        10 июня 2019, 00:59
                                        Добрый день. Можете провести интеграцию для бесплатной Gallery? Картинки убиваются…
                                        И может есть возможность сделать, чтобы была быстрая возможность включения и отключения плагина, т.к. иногда сам сжимаешь в Фотошопе как надо картинки и не хотелось бы, чтобы тини ещё вмешивался…
                                        Сергей
                                        19 августа 2019, 11:19
                                        Друзья, у меня что-то не получается, я как ни настраивал, но автоматическая настройка картинки не работает в minishop…
                                        Если кто-то может помочь, порыться, что не так, какие мои настройки сообщить? Настройки сниппета, или?..
                                          Виноградов Тимур
                                          19 марта 2020, 12:32
                                          При загрузке изображения получаю Internal Server Error.
                                          MODX Revolution 2.6.3-pl
                                          Компонент последней версии 2.0.2-beta
                                            Максим
                                            09 августа 2021, 20:21
                                            Не работает компонент почему-то с minishop2.
                                            Проверил размер превью продукта «до» и «полсе» перегенерации превью из вкладки «галерея».
                                            «До» было меньше (20кб), чем стало «после» (23кб). Если загрузить «после» вручную на сервис tinyPNG, то файл сжимается в 2 раза (49%).
                                            В phpthumb.class.php нужная сточка присутствует. При перегенерации срабатывает только 1 событие из плагина: OnFileManagerFileCreate (наверное так и должно быть, но всё равно не сжимаются картинки)
                                            Оригинал картинки был около 700 кб (т.е. меньше 5 мб).
                                              Alexey Medvedev
                                              10 августа 2021, 17:42
                                              Возможно такое, компонент не обновлялся несколько лет — там уже sdk сервисов обновились и api компонентов modx. Постараюсь в ближайший месяц переписать его.
                                                Максим
                                                10 августа 2021, 19:54
                                                Ошибку нашел. Файл:
                                                core/components/tinycompressor/model/tinycompressor/tinycompressor.class.php

                                                Строка 98.
                                                $path = $this->modx->getOption('base_path') . $container . $file['name'];

                                                $container уже содержит base_path.
                                                Плюс, между $container и $file['name'] должен быть разделитель /.

                                                После исправления, всё заработало. В личном кабинете TinyPNG появилась информация о количестве сжатых файлов.
                                                  Сергей Карпович
                                                  23 декабря 2022, 17:30
                                                  Можешь, написать как правильно должна быть написана строка 98?
                                                    Максим
                                                    26 декабря 2022, 15:33
                                                    Не помню уже на какой сайте делал (не посмотреть).
                                                    Но судя по моему комментарию должно быть как-то так:
                                                    <?php
                                                    
                                                    $path = $container . '/' . $file['name'];
                                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                            79