Массовое изменение размера картинок на сервере
Снова вернёмся к проблеме ограниченного дискового пространства на сервере. Чаще всего она возникает для VPS на SSD (SSD быстры, но дороги, поэтому хостеры, как правило, дают за те же деньги меньше диска, чем в случае с HDD). Также проблема с нехваткой диска часто возникает для серверов, где хостятся сайты с контентом, генерируемым пользователями (например, всяческие форумы, где пользователи грузят и грузят картинки). В большинстве случаев сайт тяжелеет именно за счёт картинок. И, наконец, тяжелый сайт требует больше места для бэкапов. Начинать строгую диету для сайта лучше с удаления и пережатия картинок без изменения разрешения, ведь меняя размер вы всегда рискуете тем, что где-то на сайте из-за новых размеров картинки сломается вёрстка. Но иногда пережатия недостаточно. Что же ещё можно предпринять?
Очевидно, можно попробовать уменьшить разрешение картинок. И тут очень важно трогать только те картинки, которые относятся к контенту и не относятся к вёрстке. Поэтому заранее озаботьтесь изучением движка сайта, чтобы знать, куда складываются картинки, залитые пользователями. В помощь вам вот такой конвейер:
du -sh /var/www/mysite/public/* | sort -hr
, где /var/www/mysite/public/
— корень исследуемого сайта. На выходе вы получите вес всех директорий сайта, отсортированный по убыванию, примерно так:
897M /var/www/mysite/public/sites 84M /var/www/mysite/public/core 28M /var/www/mysite/public/vendor 17M /var/www/mysite/public/modules ...
Очевидно, что много тяжелых картинок прячутся где-то в /var/www/mysite/public/sites
, узнать где именно мы можем повторив поиск и сортировку уже для этого каталога:
du -sh /var/www/mysite/public/sites/* | sort -hr
Ну, вы поняли. Таким методом можно выяснить, где загружаемые картинки лежат в вашем движке. Примеры путей (относительных, от корня сайта) для некоторых популярных движков:
- Для Drupal (вплоть до новой 8-ой версии) —
./sites/default/files/
- Для WordPress —
./wp-content/uploads/
Дальше для установленного пути выполняем:
find /var/www/mysite/public/sites/default/files/ -type f \
\( -iname "*.jpg" -or -iname "*.jpeg" -or -iname "*.png" \) \
-print0 | xargs -0 mogrify -verbose -resize 1000x1000\>
Здесь find
отвечает за поиск файлов с расширениями *.png
или *.jpeg
или *.jpg
, а благодаря ключу xargs
для каждого из найденных файлов выполняется mogrify
(это аналог convert
из ImageMagick, но mogrify
перезаписывает изменения в тот же файл, в отличии от convert
).
И особый интерес представляет ключ -resize 1000x1000\>
— его смысл в том, что мы будем изменять размер картинок, но только тех, которые больше, чем 1000 на 1000 пикселей. То есть картинку размеров 640 на 320 мы не тронем вообще, а картинку 1500 на 1200 пропорционально уменьшим (до 1000 на 800). Такая обработка, во-первых, не увеличит никакие картинки, во-вторых, выполнится быстрее.
02.02.2018 в 23:01
Спасибо, помогло!