ваш IP: 18.221.15.15

Сжатие изображений в CMS 1С Битрикс

Статью пришлось переработать, ибо оригинал (оставлю в конце записи) не совершенен. В новой версии будем использовать два других пакета для оптимизации 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.

Автор: Master Wenom
18 марта 2019
blog comments powered by Disqus