bnku

[HowTo] Пакетная обработка изображений товаров (обрезание краев)

Рекомендуемые сообщения

bnku    0

Так получилось, что в курируемом мной магазине большинство изображений товаров имеют вокруг изображения самого товара огромные пустые поля.


Я решил данную проблему путем рекурсивного обхода папки image/import_files и обработкой всех файлов изображений функцией trimImage.


 


Раньше в этой теме была просьба о помощи в решение проблемы порчи изображений товаров при обрезании краев и последующем ресайзе. Видимо, что-то пошло не так при первом проходе скрипта. При повторном запуске все проблемы исчезли сами собой :).


 


Раз проблема решена сама собой, поделюсь с сообществом этим обработчиком:



<?php
 
trimProductImages(DIR_IMAGE."import_files/");
 
// В качестве аргумента передаем путь(имя) до папки.
 
function trimProductImages($patch) {
 
$handle = opendir($patch);
 
  while(($file = readdir($handle))) {
    set_time_limit(0);
 
    if (is_file ($patch."/".$file) && (getExtension1($file) == "jpg" || getExtension1($file) == "jpeg" || getExtension1($file) == "png") )  
    {
 
      echo $patch .  "/" . $file . "\n";
 
      $image = new Imagick($patch."/".$file);
      $image->trimImage(0);
      $image->writeImage($patch."/".$file);
    }
 
    if (is_dir ($patch."/".$file) && ($file != ".") && ($file != ".."))
    {
      /* рекусрсивно проходим по директории*/
      trimProductImages($patch."/".$file);  // Обходим вложенный каталог
 
    }
  }
 
  closedir($handle);
 
}
 
function getExtension1($filename) {
  // Возвращаем расширение файла
  return substr($filename, strrpos($filename, '.') + 1);
}
 
?>

Установка:


  • сохранить скрипт в папку images/import_files/
  • запустить в браузере

Обязательно делайте бекап папки изображений, перед тем как запускать скрипт! 


Если видите испорченные изображения, значит у вас тоже что-то пошло не так и необходимо произвести процедуру повторно.


Ни в коем случае не запускайте обработчик на боевом сервере! Только на локальной машине с последующей заменой файлов изображений на рабочем сайте на полученные в результате работы скрипта.


 


Для работы скрипта требуется PHP с ImageMagick.


Так как изображений может быть несколько тысяч, задайте в php.ini максимальное время выполнения скрипта в (max_execution_time) в районе нескольких минут.


Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
afwollis    1 097

bnku, замените в коде заплатку($patch) на путь($path).

вместо

$_SERVER['DOCUMENT_ROOT']."/image/import_files"
лучше использовать

DIR_IMAGE."import_files/"
или

"./image/import_files/"
потому что магазин может быть установлен в поддиректории.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
bnku    0

 

лучше использовать

DIR_IMAGE."import_files/"

 

Ваша правда!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу