2012-03-02 2 views
0

Я пытаюсь загрузить различные изображения в динамически создаваемую папку на моем сервере, затем взять каждое изображение и изменить его размер при загрузке в папку, а также создать новое изображение и новое имя. Пример: image.jpg (исходное изображение) и image-resized.jpg (являющееся миниатюрным изображением).Невозможно изменить размер нескольких изображений в PHP

Я не могу понять, как изменить размер всех изображений. Я не уверен, должен ли я поставить его в цикле. Все, что мне нужно, это для каждого загружаемого изображения (может быть 5 раз). Он перемещается и изменяет их размеры, а не только одно изображение. Вот мой код, любая помощь будет оценена!

код для создания папки и перемещать изображение в этих папках:

// Desired folder structure 
     $structure = './Fotos/'.$newfolder; 

     // To create the nested structure, the $recursive parameter 
     // to mkdir() must be specified. 

     if (!mkdir($structure, 0, true)) { 
     die('Failed to create folders...'); 
}else{ 
    $placefoldername = mysql_query("INSERT INTO datefolders (FolderDate) VALUES ('$newfolder')") or die(mysql_error()); 
    echo "<div class=\"success\">El folder fue agregado con exito.<input type=\"button\" name=\"close\" value=\"X\" class=\"close\" /></div>"; 
    }} 

// ... 

    } 

if(isset($_POST['upload'])){ 
    $FolderDate = $_POST['fecha-folder']; 
    $FolderName = $_POST['FolderName']; 
    $hour = $_POST['hour']; 

     // Desired folder structure 
     $structure = './Fotos/'.$FolderDate.'/'.$hour.'/'.$FolderName; 

     // To create the nested structure, the $recursive parameter 
     // to mkdir() must be specified. 


     for($i=0;$i<count($_FILES['fileupload']['name']);$i++) { 
      $names = $_FILES['fileupload']['name'][$i]; 
      $target_path = "Fotos/".$FolderDate."/".$hour."/".$FolderName."/"; 

      $target_path = $target_path . basename($_FILES['fileupload']['name'][$i]); 

      if(move_uploaded_file($_FILES['fileupload']['tmp_name'][$i], $target_path)) { 
      $success = 1; 

код, чтобы создать меньший (изменения размера изображения), а также поместить в уже созданную папку:

$img = $names; 
     $imgPath = $structure; 


     function resizeImage($img, $imgPath, $suffix, $by, $quality) 
{ 
    //Create a thunbnail image by resizing the picture 
    // Open the original image. 
    $original = imagecreatefromjpeg("$imgPath/$img") or die("Error Opening original (<em>$imgPath/$img</em>)"); 
    list($width, $height, $type, $attr) = getimagesize("$imgPath/$img"); 

    // Determine new width and height. 
    $newWidth = ($width/$by); 
    $newHeight = ($height/$by); 

    // Resample the image. 
    $tempImg = imagecreatetruecolor($newWidth, $newHeight) or die("Cant create temp image"); 
    imagecopyresized($tempImg, $original, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height) or die("Cant resize copy"); 

    // Create the new file name. 
    $newNameE = explode(".", $img); 
    $newName = ''. $newNameE[0] .''. $suffix .'.'. $newNameE[1] .''; 

    // Save the image. 
    imagejpeg($tempImg, "$imgPath/$newName", $quality) or die("Cant save image"); 

    // Clean up. 
    imagedestroy($original); 
    imagedestroy($tempImg); 
    return true; 
} 
$resize = resizeImage($img, $imgPath, "-resized", 23, 100); 
+0

Является ли ваше объявление функции фактически в цикле foreach или было ошибкой копирования/вставки? Если он находится в цикле, тогда вы столкнетесь с ошибкой определения двойной функции. – Corbin

+0

Ошибка! Просто снял: P – liveandream

ответ

0

Почему вы определяя функцию resizeImage в цикле for? Он переопределяется каждый раз, когда цикл повторяется. Это может быть частью проблемы. Определите функцию вне цикла и посмотрите, работает ли это.

+0

Извините, я просто снял его .. это было просто то, с чем я играл, забыл снять его перед публикацией. – liveandream

+1

Я понял! Мне нужно вывести функцию из цикла for, а затем просто вызвать функцию внутри цикла. В любом случае, спасибо всем! – liveandream

0

вы можете попробовать;

, когда ваше первое изображение завершает работу imagedestroy(), тогда второе изображение будет выполнено.

+0

Я уже использую imagedestroy на исходном изображении и временном изображении. Должен ли я также добавить это в $ img и $ imgPath ?? Спасибо! – liveandream