Сжатие изображений для сайта: способы и методы

Сжать и оптимизировать изображения для сайта можно разными способами и метода. Но здесь речь пойдет о том, что именно помогло мне.

Задача состояла в том, что на сайте Битрикс нужно было пересжать папку /upload/iblock/.

В ней файлы весили много мегабайт, поэтому поискав информацию нашел решение.

Сжатие изображений на VPS (на виртуальном сервере).

Есть 2 утилиты для сжатия изображений, и если у Вас VPS, то сделать это достаточно просто.

Необходимо установить jpegoptim и optipng.

Команды для установки их в Linux:


sudo apt-get install optipng

sudo apt-get install jpegoptim

Затем необходимо перейти в папку изображений в рекурсивно сжать через консоль все изображения.

Рекурсивное сжатие .jpg

find -type f -name "*.jpg" -exec jpegoptim --strip-all --max=70 {} \;
Рекурсивное сжатие .png

find -type f -name "*.png" -exec optipng -o4 {} \;

Здесь max=70 характеризует степень сжатия, сейчас стоит среднее значение. Также степень сжатия зависит и от -о4, но здесь лучше не ставить высокое значение, а то долго придется сжать. В данном случае стоит 4 прохода, среднее значение.

Сжатие изображений на обычном хостинге.

Чтобы сжать изображения на обычном хостинге, нужно:

  • 1) получить все изображения
  • 2) скачать все изображения на компьютер
  • 3) сжать все изображения специальными программами или софтом
  • 4) загрузить все изображения обратно
  • Выбран данный вариант был так как картинок очень много и весят они в среднем по 5 мегабайт. Всякие модули для Битрикс имеют ограничения, а нормальные модули стоят денег. Поэтому оптимальным оказалось использовать такой вариант. Еще и дисковое пространство на хостинге начало переполняться лишними мегабайтами.

    Есть несколько способов сделать скачивание. Но так как на хостинге мало места, то архивирование этой папки значительно превысит дисковое пространство.

    Решение: провести скачивание при помощи списка файлов и сделать это при помощи команды в консоле.

    1. Получение всех изображений, находящихся в инфоблоках, папка /upload/iblock/.

    Создаем в корне сайта скрипт для получения изображений, назовем его test.php

    Для Битрикс получение всех картинок в папке /upload/iblock/ выглядит так:

    <code class="language-php">
    $dir = "./upload/iblock/"; 
    function getDirContents($dir, &$results = array()){ 
      $files = scandir($dir); 
    foreach($files as $key => $value){ 
      $path = realpath($dir.DIRECTORY_SEPARATOR.$value); 
        if(!is_dir($path)) {
          //заменяем путь до директории на адрес сайта, 
          //чтобы потом скачать свои картинки
          $path = str_replace("/home/путь до директории сайта/public_html", 
          "https://адрес сайта.ru", $path); 
          $results[] = $path; 
          //пишем в лог пути к картинкам
          file_put_contents($_SERVER['DOCUMENT_ROOT'].'/file.txt',
          $path."\n", FILE_APPEND);
    
        } else if($value != "." && $value != "..") { 
          getDirContents($path, $results); 
        //$results[] = $path; 
        } 
        } 
        return $results; 
    }
    </code>
    Где /home/путь до директории сайта/public_html - это дирректория на сервере, где лежит файл, а https://адрес сайта.ru - сам домен сайта, с которого будут скачиваться картинки.

    В результате получится файл такого содержания:

    файл скачивания с сервера картинок

    2. Скачивание всех изображений находящихся на хостинге на компьютер.

    Для решения задачи скачивания множества файлов на помощь пришел Git Bash. Он позволяет в среде Windows выполнить команду скачивания и сжатия файлов (которые описаны выше, в пункте сжатия изображений для VPS).

    В консоли Git Bash переходим в нужную папку, при помощи команды:

     cd /images/
    .

    Вбиваем команду для скачивания множества файлов из текстового файла file.txt.

    Команда для скачивания файлов с сервера:

    wget -r --no-parent -i file.txt

    При этом убедитесь, что файл file.txt лежит в директории /images/.

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

    3) Сжать все изображения специальной программной или софтом.

    Для этого в среде Windows можно скачать все те же программы, что и описаны выше jpegoptim (https://sourceforge.net/projects/jpegoptim/) и optipng (https://sourceforge.net/projects/optipng/) и закинуть файлы программы в папку С://Windows - это папка, где находятся сама система (системные файлы).

    В линукс программы устанавливается проще для дебиан:

    
        apt-get install jpegoptim 
        apt-get install optipng
    

    Дальше нужно просто выполнить перейти в папку cd /images/ выполнив это в консоли.

    Затем уже выполнить те же команды для рекурсивного обхода по файлам для сжатия изображений:

    Рекурсивное сжатие .jpg
    
    find -type f -name "*.jpg" -exec jpegoptim --strip-all --max=70 {} \;
    
    Рекурсивное сжатие .png
    
    find -type f -name "*.png" -exec optipng -o4 {} \;
    

    4) Загрузить все изображения обратно на хостинг при помощи любого FTP клиента.

    Сам использую клиент WinSCP.

    Нужно просто выделить все файлы и заменить их. Опять же если есть место на хостинге таких операций не потребуется. На картинке показано как выделить файла (CTRL + A) и мышкой сделать перенос файлов. Важно чтобы перетаскивание не было в какую либо папку.

    Загрузка файлов WinSCP


    Уважаемый читатель!

    Ты можешь сделать проект Mirdeveloper.ru лучше!

    Написание статей требует много затрат, времени и сил, ресурсов, в том числе и денежных.

    Оставь чаевые, и будут новые статьи, и появятся видео.

    Это даст новые возможности в улучшении сайта

    Спасибо за то, что Вы с нами!


    Комментарии находятся на модерации или не добавлены.

    Для добавления комментариев необходимо зарегистрироваться и авторизоваться

    Также возможно авторизоваться через Социальную сеть Вконтакте (VK)