Цель конвертации заключается не только в экономии места на хостинге, но и в ускорении загрузки страниц сайта. Ведь чем меньше размер контента, тем быстрее он будет передан пользователю по интернету.
Все действия в статье будем проводить на дистрибутиве Linux, с установленным пакетом ImageMagic. Этот пакет можно установить как на сервере, так и на персональном компьютере.
Массовая конвертация в JPG
Для массовой конвертации изображений необходимо открыть консоль (или подключиться к серверу по ssh) и перейти в папку, выше которой конвертация всех вложенных изображений. Изменениям подвергнутся все изображения, вне зависимости от вложенности папок. Для запуска процесса нужно выполнить команду:find . -name "*.png" -exec mogrify -background white -flatten -format jpg {} \; -exec rm -v {} \;
Эта команда найдёт все файлы, которые лежат в текущей папке (и во всех вложенных) и у которых название оканчивается на ".png". Затем адреса этих файлов будут переданы команде "mogrify" для преобразования их в ".jpg". А в конце исходные файлы ".png" будут удалены. Разберём подробнее части этой команды:
- find . -name "*.png" -exec mogrify ... {} - находит все файлы с расширением ".png" (пути к ним содержатся в
{}
). Ключ exec вызывает команду "mogrify", передавая ей путь к каждому найденному файлу. - mogrify -background white -flatten -format jpg {} - эта команда форматирует изображение по адресу
{}
в "jpg". Параметр "background white" говорит о том, что если в "png" будет использоваться прозрачные пиксели, то они будут заменены на белые (без ключа "flatten" не работает). Ключ "format jpg" указывает на изменение формата файла именно в "jpg". - -exec rm -v {} \; - удаляет сходный файл "png". Если не сделать это, то рядом с "png" файлами останутся "jpg" копии.
Адреса файлов в базе данных
Обратите внимание, что после изменения форматов изображений сменятся их названия (в конце файлов было "png", стало "jpg"). Поэтому если ссылки на файлы были занесены в базу данных, то они станут неактивными. Это можно исправить с помощью SQL запроса или через phpMyAdmin, заменив все вхождения ".png" на ".jpg" в нужных таблицах и столбцах.UPDATE таблица SET столбец = REPLACE(столбец, '.png','.jpg');
В этом SQL запросе необходимо заменить "таблица" и "столбец" на существующие в проекте.