За последние 24 часа нас посетили 7676 программистов и 438 роботов. Сейчас ищут 143 программиста ...

Массовое уменьшение картинок

Тема в разделе "PHP для новичков", создана пользователем leshiy, 11 янв 2017.

  1. leshiy

    leshiy Активный пользователь

    С нами с:
    18 июл 2008
    Сообщения:
    87
    Симпатии:
    0
    Почему то в цикле уменьшается только первая картинка и выводится ошибка.
    Подскажите в чем проблема?
    PHP:
    1. <?php
    2. $root = 'L:';
    3. $folder = '/scrin'; //Папка с файлами
    4. $array_file = scandir($root.$folder); //Масcив с именами файлов
    5. foreach($array_file as $name_file){ // Наш цикл
    6.     if (!is_dir($root.$folder.'/'.$name_file)){
    7.  
    8.   /*
    9.   $w_o и h_o - ширина и высота выходного изображения
    10.   */
    11.   function resize($image, $w_o = false, $h_o = false) {
    12.     if (($w_o < 0) || ($h_o < 0)) {
    13.       echo "Некорректные входные параметры";
    14.       return false;
    15.     }
    16.     list($w_i, $h_i, $type) = getimagesize($image); // Получаем размеры и тип изображения (число)
    17.     $types = array("", "gif", "jpeg", "png"); // Массив с типами изображений
    18.     $ext = $types[$type]; // Зная "числовой" тип изображения, узнаём название типа
    19.     if ($ext) {
    20.       $func = 'imagecreatefrom'.$ext; // Получаем название функции, соответствующую типу, для создания изображения
    21.       $img_i = $func($image); // Создаём дескриптор для работы с исходным изображением
    22.     } else {
    23.       echo 'Некорректное изображение'; // Выводим ошибку, если формат изображения недопустимый
    24.       return false;
    25.     }
    26.     /* Если указать только 1 параметр, то второй подстроится пропорционально */
    27.     if (!$h_o) $h_o = $w_o / ($w_i / $h_i);
    28.     if (!$w_o) $w_o = $h_o / ($h_i / $w_i);
    29.     $img_o = imagecreatetruecolor($w_o, $h_o); // Создаём дескриптор для выходного изображения
    30.     imagecopyresampled($img_o, $img_i, 0, 0, 0, 0, $w_o, $h_o, $w_i, $h_i); // Переносим изображение из исходного в выходное, масштабируя его
    31.     $func = 'image'.$ext; // Получаем функция для сохранения результата
    32.     return $func($img_o, $image); // Сохраняем изображение в тот же файл, что и исходное, возвращая результат этой операции
    33.   }
    34.   /* Вызываем функцию с целью уменьшить изображение до ширины в 100 пикселей, а высоту уменьшив пропорционально, чтобы не искажать изображение */
    35.   resize($root.$folder.'/'.$name_file, 250);
    36.              //Записываем новое имя
    37.             }else{
    38.                 echo "Ошибка переименования файла $name_file<br/>"; // это тоже
    39.             }
    40.         }
    41. ?>
     
  2. Fell-x27

    Fell-x27 Старожил
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    8.898
    Симпатии:
    749
    Адрес:
    :сердА
    Текст ошибки в студию.
     
  3. leshiy

    leshiy Активный пользователь

    С нами с:
    18 июл 2008
    Сообщения:
    87
    Симпатии:
    0
    Ошибка переименования файла .
    Ошибка переименования файла ..

    Fatal error: Cannot redeclare resize() (previously declared in Z:\home\localhost\www\izmen_raz.php:10) in Z:\home\localhost\www\izmen_raz.php on line 10
     
  4. Fell-x27

    Fell-x27 Старожил
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    8.898
    Симпатии:
    749
    Адрес:
    :сердА
    А теперь попробуйте текст ошибки перевести на русский. Серьезно. Там черным по белому написано, прям вот точно в чем ошибка, и откуда растут ее ноги.
     
    SamyRed нравится это.
  5. leshiy

    leshiy Активный пользователь

    С нами с:
    18 июл 2008
    Сообщения:
    87
    Симпатии:
    0
    Фатальная ошибка: невозможно переопределить Размер() (ранее объявленный в
    Да но как это понять и исправить?
     
  6. Abyss

    Abyss Новичок

    С нами с:
    12 дек 2015
    Сообщения:
    792
    Симпатии:
    97
    Адрес:
    Default city
    Ахахахаахаххах аха зааазазха
    --- Добавлено ---
    Ну начнём с того, что создание функции в цикле это агонь.
     
  7. Fell-x27

    Fell-x27 Старожил
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    8.898
    Симпатии:
    749
    Адрес:
    :сердА
    У вас есть цикл с пятой строки начинается.
    А еще у вас в теле цикла есть объявление функции. С 11 строки начинается.
    При первой итерации цикла все ок, функция создалась, и даже отработала. На второй итерации происходит попытка создания этой функции снова, а так нельзя. Не может быть две функции с одной сигнатурой. В итоге все падает после первой итерации.

    Решение? Не объявлять функцию в цикле.
    --- Добавлено ---
    Ну или обратиться к автору скрипта, чтобы он объяснил, какого лешего у него такая адулька. Потому что автор скрипта не вы. Вы php впервые в жизни видите.
    --- Добавлено ---
    Мне еще вот это нравится:
    --- Добавлено ---
    И это тоже просто прекрасно. Входные параметры придуманы для слабаков.
    PHP:
    1. if ($ext) {
    2.      $func = 'imagecreatefrom'.$ext; // Получаем название функции, соответствующую типу, для создания изображения
    3.      $img_i = $func($image); // Создаём дескриптор для работы с исходным изображением
    4.    }
    --- Добавлено ---
    Мне прям даже хочется заглянуть глубже под капот. Там наверняка пахнет карри.
     
    HeavyLady нравится это.