Skip to content

Latest commit

 

History

History
76 lines (65 loc) · 6.58 KB

readme.ru.md

File metadata and controls

76 lines (65 loc) · 6.58 KB

Reduction

Утилита Reduction предназначена для оптимизации размера изображений на сайте. Нередко пользователи загружают на сервер слишком большие изображения :)
Логика работы приложения следующая: сначала инспектируются директории на наличие файлов изображений (jpeg, png, gif) больших определённого размера, затем может быть произведена перезапись найденных файлов с оптимальной шириной и высотой (пропорции остануться правильными). Поиск файлов осуществляется рекурсивно.
Отбирать изображения можно не только по размеру файла, но и по размеру "длинной" стороны изображения. Настройки помещены в файл data/config.json.
Чтобы ориентироваться сколько приложение выполняется по времени и потребляет памяти написан класс Marker. Результаты пишутся в лог.

Посмотрим на файл data/config.json, в нём:
"folderPath" - относительный путь к целевой директории изображений от app.php
"mode" - режим выбора изображений либо "ImageSide", либо "FileSize"
"maxFileSize" - в режиме "FileSize" будут выбраны файлы больше указанного размера в байтах
"maxImageSide" - в режиме "ImageSide" будут выбраны файлы, у которых длинная сторона больше указанного здесь значения в пикселях
"maxWidth" - ширина новых изображений, если изображения горизонтальные в пикселях
"maxHeight" - высота новых изображений, если изображения вертикальные в пикселях
"ableTypes" - массив расширений файлов, необязательно там должно быть 3 значения, выберите одно или два для "точечной" работы
"quality" - показатель quality при записи jpeg и png изображений функциями imagejpeg(), imagepng()

Использование

Рассмотрим случай, когда вы расположите директорию vendor в корневой директории вашего сайта.

# перейдите в корневую директорию сайта
$ cd root-of-site
# потребуйте пакет navt/reduction
$ composer require navt/reduction:dev-master
# убедитесь, что в корневой директории нет файла app.php и директории data.
# выполните копирование  
$ cp vendor/navt/reduction/app.php ./
$ cp -r vendor/navt/reduction/data ./

Отредактируйте data/config.json и app.php в соответствии с вашей текущей задачей.
Запустите скрипт

$ php -f app.php

Изначально в файле app.php содержится код для инспектирования целевой директории. Если вы решили, что настало время уменьшить размер отобранных файлов, то код в app.php нужно привести к виду:

<?php

chdir(__DIR__);
require_once __DIR__.'/vendor/autoload.php';

use navt\Reduction\Logger\Logger;
use navt\Reduction\Marker;
use navt\Reduction\Reduction;

$log = new Logger("data/app.log");
$marker = new Marker($log);

// создаём экземпляр Reduction, получаем список файлов, печатаем в лог
$reduct = new Reduction($log, "data/config.json");
$reduct->getList();  // создает список отфильтрованных файлов
$reduct->printList();
$marker->addMark();  // добавление метки времени

// уменьшаем размер файлов по списку, уничтожаем экземпляр Reduction
$reduct->reductAll(); // перезапись файлов
$reduct = null;
$marker->addMark();

// проверяем, что получилось
$reduct = new Reduction($log, "data/config.json");
$reduct->getList();
$reduct->printList();
$marker->addMark();

$marker->display();

Особенности

Использование консоли является предпочтительным, потому что при достаточно больших объёмах изображений приложению потребуется время для решения задачи. Проведите оценочный запуск с небольшим количеством файлов, чтобы понимать с какой скоростью работает утилита.
Позаботьтесь о целостности своих данных: сделайте дамп директорий, где планируется проводить работы, запустите скрипт на тестовых данных на локальном компьютере, посмотрите, удовлетворяет ли вас результат.
Для работы с jpeg, png и gif-изображениями без анимации будет использоваться модуль PHP gd.
Для работы с gif-изображениями, имеющими несколько слоёв(анимацию) на вашем сервере должен быть установлен модуль PHP imagick. Если такого модуля нет, то gif с анимацией не будут затронуты.
Если вы собираетесь уменьшать gif-изображения, имеющие несколько слоёв, рассмотрите вариант отдельного запуска утилиты только для gif.

Ссылка

Оптимизация размера изображений на сайте