[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
11 декабря 2017, 00:37
modx.pro
8
8 666
+16

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

Баха Волков
10 декабря 2017, 22:58
0
После загрузки, получаю Internal Server Error
    Alexey Medvedev
    10 декабря 2017, 23:11
    +1
    Исправьте в плагине 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
      +2
      Компонент временно отключен
        Баха Волков
        10 декабря 2017, 23:55
        1
        0
        К сожалению, все равно выдают выше упомянутую ошибку

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

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

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

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

                    // Обратите внимание, что прописано в параметре 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
                  0
                  Чуть выше, есть решение.
              Димыч
              12 декабря 2017, 22:23
              0
              Алексей, а к ms2Gallery можно ваш чудесный компонент прикрутить? )
                Alexey Medvedev
                12 декабря 2017, 23:01
                0
                Интеграцию проводил ещё в прошлой версии, если Василий ничего не менял в компоненте, то должно работать :) Попробуйте, если будут проблемы или не будет сжимать, пишите — посмотрю, что можно сделать.
                  Димыч
                  12 декабря 2017, 23:25
                  0
                  Вроде не работает. Вручную через сайт заметно меньше получаются фото.
                  Настройка tinycompressor_tinypng_upload_enable включена.
                    Alexey Medvedev
                    13 декабря 2017, 20:06
                    0
                    Хорошо, буду посвободнее посмотрю.
                      Дмитрий
                      06 января 2018, 16:40
                      0
                      Алексей, благодарю за отличный компонент!

                      Интеграция с галереей ms2Gallery была бы очень кстати. Скажите, пожалуйста, когда планируете реализовать? Готов спонсировать! Сообщите, пожалуйста, по стоимости доработки.
                        Alexey Medvedev
                        09 января 2018, 02:45
                        0
                        Приношу извинения за ожидания.
                        Дмитрий, интеграция с ms2Gallery стоит в списке задач. Пока по срокам с ориентировать не могу. Конец года был очень напряженным и сытным на работу. До 29 января у меня всё расписано, к сожалению. Если появится свободное время, то постараюсь реализовать эту функцию. Компонент ms2Gallery является проприетарным(платным) попрошу у Василия часть кода загрузки изображений или хотя бы описание его работы.
                          Дмитрий
                          09 января 2018, 20:18
                          0
                          Алексей, благодарю!
                Сергей Самусев
                24 декабря 2017, 13:53
                0
                Есть ли возможность интегрировать компонент с Gallery?
                  Alexey Medvedev
                  24 декабря 2017, 20:43
                  0
                  Должно работать, попробуйте загрузить фотографию и просмотрите изменился ли размер.
                    Сергей Самусев
                    24 декабря 2017, 20:48
                    0
                    Я тоже так думал… пробовал. файл загрузился того же размера.
                      Alexey Medvedev
                      24 декабря 2017, 20:55
                      0
                      Хорошо. Я посмотрю. Ждите обновления.
                        Дмитрий
                        05 октября 2018, 19:24
                        0
                        А у меня вообще не работает. Загрузка происходит вроде, но превьюшка в альбоме белая и вообще не открывается.
                        Полная картинка тоже.
                        prntscr.com/l2mb94
                  Avaz
                  24 декабря 2017, 19:49
                  0
                  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
                    0
                    Два выхода из ситуации:
                    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
                    0
                    Спасибо за полезный компонент!
                    Столкнулся с такой штукой: стоит компонент 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
                      0
                      В FastUploads стоит в плагине переименование файла. Если Вы отключите переименование файла в настройках компонента. Проблем быть не должно.
                      Игорь
                      16 мая 2018, 11:27
                      0
                      А можно настроить степень сжатия. Просто он выдает файлы по 1,5 мб. а сам тини на сайте может сжать их до 200-400 кб
                        Alexey Medvedev
                        17 мая 2018, 11:42
                        0
                        Степень сжатия изменить нельзя. Так как компонент работает в режиме эмуляции загрузки через сайт tinypng.com. Скорее всего у Вас ничего не сжимается, т.к. происходит ошибка поиска файла на сервере. Посмотрите error.log сайта.
                        Nick
                        24 июня 2018, 20:43
                        0
                        После установки компонента перестали подгружаться фотографии в 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
                          0
                          Поищите плагин tinyCompressor и удалите его.
                            Nick
                            25 июня 2018, 16:26
                            0
                            Спасибо.Сначала не понял о чем Вы. Плагин удалил, помогло!
                          Павел
                          30 июня 2018, 17:32
                          0
                          Здравствуйте. Поставил компонент, но степень сжатия файлов изображений (ms2Gallery-1.4.8 и minishop2-2.2.0) не поменялась ни на 1 байт, такое впечатление, что изображения по прежнему сжимает PhpThumb. В лог-файле ошибок нет. Можете посоветовать, как это исправить?
                            Alexey Medvedev
                            30 июня 2018, 18:44
                            0
                            Здравствуйте.

                            1. Проверьте наличие строки в файле /core/model/phpthumb/phpthumb.class.php'
                            $this->modx->invokeEvent('OnPhpThumbRenderToFile', array('filename' => $renderfilename));
                            2. Очистите кэш изображений ms2Gallery.
                            3. Включите сжатие при загрузке в настройках.
                              Павел
                              30 июня 2018, 21:32
                              0
                              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
                                0
                                Варианты:
                                1. Попробуйте не генерировать превью через скрипт, а просто загрузить страницу. Не забудьте очистить кэш превью.
                                2. Закомментируйте строчки 132-150 кода в файле /var/www/data/site.ru/core/components/tinycompressor/model/tinycompressor/tinycompressor.class.php. Это строчки переименования файла.
                                  Павел
                                  01 июля 2018, 16:06
                                  0
                                  Спасибо. Проблема решилась изменением кода в строке 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
                                    0
                                    Спасибо. Та же самая история была. Теперь все заработало, всему виной строка 98.
                                    P.S.: использую ms2Gallery 2.0.6-pl
                                Павел
                                01 июля 2018, 08:07
                                0
                                PS. Забыл приложить ссылку на скрипт
                              ru_smc
                              23 июля 2018, 18:21
                              0
                              Что-то не догоняю я как он работает. Установил, в настройках указал «Да» в пункте Сжимать загружаемые изображения. Картинки как загружались, так же и загружаются с исходным размером.
                              Или я что-то не так сделал?
                                Alexey Medvedev
                                23 июля 2018, 19:13
                                +1
                                Если размер изображения более 5 МБ, то нужен ключ для tinyPNG. Посмотрите лог modx и php на наличие ошибок.
                                Max
                                Max
                                27 июля 2018, 15:47
                                0
                                (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
                                  0
                                  Решили вопрос
                                  Александр Туниеков
                                  12 августа 2018, 21:08
                                  0
                                  У меня при загрузке в 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
                                    0
                                    Если вы сжимаете phpThumbOn с большой потерей качества, тут Вам ничего не поможет :)
                                    TinyPNG — это сервис сжатия изображений без видимой потери качества.
                                      Александр Туниеков
                                      12 августа 2018, 22:56
                                      0
                                      у phpThumbOn качество по умолчанию стоит 0.9 и я его не менял. А вот OptiPic этот же файл сжал на 67%
                                    Игорь
                                    02 мая 2019, 20:47
                                    0
                                    Здравствуйте. У меня, почему-то не работает интеграция с phpthumbon — т.е. «необрезанная» картинка весит 100kb, после обрезания (соответственно она уже стала меньше по размеру) — 130kb. Никаких специальных настроек для phpthumbon.
                                    Как такое может быть? :)
                                      Alexey Medvedev
                                      02 мая 2019, 21:10
                                      0
                                      В настройках посмотрите: включена ли функция сжатия превью? Если включена, то проверьте интеграцию в 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
                                      1
                                      0
                                      Добрый день. Сразу к делу перейду. Хостинг 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
                                        1
                                        0
                                        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
                                          0
                                          Спасибо большое, Алексей. Заработало. Странно, вроде просмотрел ответы… Как же решения не нашел?
                                        DeHuCkA
                                        06 июня 2019, 16:19
                                        0
                                        Добрый день.
                                        Не работает компонент с 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
                                          0
                                          Здравствуйте.
                                          Исходное имя файла, которое загружаете через галерею, какое?
                                            DeHuCkA
                                            06 июня 2019, 19:12
                                            0
                                            Исходное имя файла не меняется после загрузки, в данном примере оно было 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
                                          0
                                          Добрый день. Можете провести интеграцию для бесплатной Gallery? Картинки убиваются…
                                          И может есть возможность сделать, чтобы была быстрая возможность включения и отключения плагина, т.к. иногда сам сжимаешь в Фотошопе как надо картинки и не хотелось бы, чтобы тини ещё вмешивался…
                                          Сергей
                                          19 августа 2019, 11:19
                                          0
                                          Друзья, у меня что-то не получается, я как ни настраивал, но автоматическая настройка картинки не работает в minishop…
                                          Если кто-то может помочь, порыться, что не так, какие мои настройки сообщить? Настройки сниппета, или?..
                                            Виноградов Тимур
                                            19 марта 2020, 12:32
                                            0
                                            При загрузке изображения получаю Internal Server Error.
                                            MODX Revolution 2.6.3-pl
                                            Компонент последней версии 2.0.2-beta
                                              Максим
                                              09 августа 2021, 20:21
                                              0
                                              Не работает компонент почему-то с minishop2.
                                              Проверил размер превью продукта «до» и «полсе» перегенерации превью из вкладки «галерея».
                                              «До» было меньше (20кб), чем стало «после» (23кб). Если загрузить «после» вручную на сервис tinyPNG, то файл сжимается в 2 раза (49%).
                                              В phpthumb.class.php нужная сточка присутствует. При перегенерации срабатывает только 1 событие из плагина: OnFileManagerFileCreate (наверное так и должно быть, но всё равно не сжимаются картинки)
                                              Оригинал картинки был около 700 кб (т.е. меньше 5 мб).
                                                Alexey Medvedev
                                                10 августа 2021, 17:42
                                                +1
                                                Возможно такое, компонент не обновлялся несколько лет — там уже sdk сервисов обновились и api компонентов modx. Постараюсь в ближайший месяц переписать его.
                                                  Максим
                                                  10 августа 2021, 19:54
                                                  0
                                                  Ошибку нашел. Файл:
                                                  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
                                                    0
                                                    Можешь, написать как правильно должна быть написана строка 98?
                                                      Максим
                                                      26 декабря 2022, 15:33
                                                      0
                                                      Не помню уже на какой сайте делал (не посмотреть).
                                                      Но судя по моему комментарию должно быть как-то так:
                                                      <?php
                                                      
                                                      $path = $container . '/' . $file['name'];
                                              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                              79