Скрипт массового уменьшения/увеличения изображений

  • Автор темы Автор темы Denzy
  • Дата начала Дата начала

Denzy

Злобный самаритянин
Команда форума
Moderator
Разрушитель (V)
Сообщения
412
Реакции
275
Баллы
3 700
В процессе долгой работы магазина на opencart, столкнулся с проблемой переполнением изображениями товаров.
Вес порядка 500 гб на сервере.
Собственно, меньше слов, больше дела
PHP:
<?php

//Полный путь до папки с изображением
$imgdir = "";
//Ширина изображения, с которой будем проводить сжатие
$fwidth = "1000";
//До какой ширины сжимаем картинки
$width = "1000";

$dir = new RecursiveDirectoryIterator($imgdir);
$allowed=array("jpg","jpeg","png");
foreach(new RecursiveIteratorIterator($dir) as $file) {
    if(in_array(substr($file, strrpos($file, '.') + 1),$allowed)) {
        $wh = getimagesize($file);
    
        if( $wh[0] > $fwidth){
system("convert $file -resize $width $file");
    }
    
    }
}

?>

Предупрежу сразу, что:
Действия необратимы
Не тестировал с изображениями png, у которых прозрачный фон
Не тестировал увеличение изображений (за ненадобностью), но по идее должен увеличивать
На сервере должен установлен ImageMagick
Скрипт неплохо грузит процессор
Если запускаете из под root, не забывайте выставить права на группу и пользователя
 
Последнее редактирование:
можно использовать https://github.com/centminmod/optimise-images
скрипт не только может изменять разрешение изображений, но и оптимизировать (собственно, это и есть его главная задача)
 
  • Мне нравится
Реакции: GiT
Дополню, что скрипты не всегда работают корректно, бывает превышается время работы скрипта на сервере или ещё какой глюк. Я предпочитаю для нескольких изображений использовать сервис tinypng.com, а если много изображений - то просто выкачиваю папку по FTP, обрабатываю через ifranview (пакетная обработка - качество 75%, высота не больше 1000px для веба достаточно, можно вотермарк добавить), пакетно обрабатываю и закачиваю по FTP на сервер с заменой. Это бывает быстрее скрипта и надёжнее, можно бекап сделать.
 
Назад
Верх