Статью пришлось переработать, ибо оригинал (оставлю в конце записи) не совершенен. В новой версии будем использовать два других пакета для оптимизации JPG и PNG, типы GIF обпрабатывать не будем, так как они почти не используются.
Итак начнём, для начало установим на сервере два пакета:
для оптимизации JPG
sudo apt-get install jpegoptim
для оптимизации png
sudo apt-get install optipng
В скрипте будем так же, как и прежде, рекурсивно перебирать массив с файлами, определять тип файла и в зависимости от типа файла, оптимизировать нужной утилитой:
#!/bin/bash
cd /[путь до установленной CMS 1с Битрикс]/upload/iblock/
imagemass=`find . -type f -regex ".*\.\(jpg\|jpeg\|gif\|png\|JPG\|JPEG\|GIF\|PNG\)" -size +100k |tr '\n' ' ' |sed "s/ /,/g"`
i=0
IFS=','
read -r -a arrayname <<< "$imagemass"
while [ $i -lt ${#arrayname[@]} ]
do
sizeimg=`du -h ${arrayname[$i]}`
echo "Размер файла до преобразования" $sizeimg
image_format=`identify -format %m ${arrayname[$i]}`
if [ $image_format = "JPEG" ]
then
jpegoptim --strip-all --all-progressive -ptm85 ${arrayname[$i]}
elif [ $image_format = "PNG" ]
then
optipng -strip all -o5 ${arrayname[$i]}
else
echo "ДРУГОЙ ФОРМАТ"
fi
sizeimagem=`du -h ${arrayname[$i]}`
echo "Размер файла после преобразования" $sizeimagem
i=$[i+1]
done
Про параметры утилит optipng и jpegoptim можете просмотреть в man или в официальной документации.
Данный скрипт обработал почти 23000 файлов изображений за 24 минуты на VDS (2 Core CPU, 8 Gb RAM, HDD не SSD). Нагрузка на CPU 50%. Сжал 7 Gb до 2,4 Gb. Качество картинок на уровне. Полёт нормальный!
Собственно дальше текст старой статьи.
Не секрет, что популярная в России CMS 1C Битрикс, довольно требовательна к ресурсам. Проблемы оптимизации данной CMS известны всем пользователям и администраторам. Одной из причин является множитель медиа файлов, а за счёт не компетенции пользователей, которые не оптимизируют изображения, свободное место на файловой системе довольно прогрессивно заканчивается. Способ нативного решения данной проблемы следующий, конечно, если у вас есть доступ к shell.
#!/bin/bash
cd /[путь до установленной CMS 1с Битрикс]/upload/iblock/
imagemass=`find . -type f -regex ".*\.\(jpg\|jpeg\|gif\|png\|JPG\|JPEG\|GIF\|PNG\)" -size +100k |tr '\n' ' ' |sed "s/ /,/g"`
i=0
IFS=','
read -r -a arrayname <<< "$imagemass"
while [ $i -lt ${#arrayname[@]} ]
do
sizeimg=`du -h ${arrayname[$i]}`
echo "Размер файла до преобразования" $sizeimg
convert ${arrayname[$i]} -quality 75 ${arrayname[$i]}
sizeimagem=`du -h ${arrayname[$i]}`
echo "Размер файла до преобразования" $sizeimagem
sleep 1
i=$[i+1]
done
echo $i
Скрипт рекурсивно выбирает файлы по маске в каталоге upload/iblock, размер которых превышает 100 Кбайт и выполняет сжатие с качеством 75%. При выполнении скрипта будет выводиться информация о файле, его исходный размер и размер после сжатия.
Естественно данный скрипт можно использовать для сжатия любого изображения, которое необходимо оптимизировать под WEB.
Важно! Убедитесь, что в системе установлен ImageMagick.