2015-12-23 2 views
1

Я пытаюсь преобразовать JPG (ну любое изображение) в PNG. У меня есть HTML-форма, которая хорошо помещает изображение на сервер. Мне нужно переименовать этот файл, а также преобразовать его в PNG. Позже в моем коде после того, как я сделаю связанную таблицу базы данных, я снова переименую файл, чтобы добавить идентификатор записи к имени файла, чтобы обеспечить его уникальность.PHP Преобразование изображения POST в PNG

Я скорее объективный программист C, чем PHP, поэтому я боюсь здесь с этим кодом, который я нашел в других вопросах, которые, похоже, не работают для меня.

Вот print_r($_FILES);

Array ([image] => Array ([name] => BBnL9Ho.jpg [type] => image/jpeg [tmp_name] => /tmp/phphhqHam [error] => 0 [size] => 1636))

Итак, я хочу, чтобы преобразовать его в PNG и переименовать BBnL9Ho.jpg to image1.png. Я попытался, используя следующий код, но безрезультатно:

$newfileName = imagepng(imagecreatefromjpeg($_FILES['image']['tmp_name']), "image1.png"); 

Позже после того, как я связанный таблицы базы данных INSERT, я снова изменить имя и добавить идентификатор соответствующей записи базы данных (хранить имя файла в отдельная таблица, то остальные формы данных из-за одного до многих отношений):

$fileName="$lastinsertID".$newfileName; 

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

move_uploaded_file("$fileName",$dir . $fileName); 

Вот где моя проблема. Файл не перемещается. И когда я проверяю атрибуты файла, кажется, что он фактически не конвертировал файл. Я использую это, чтобы проверить тип:

$fileType = $_FILES["image"]["type"]; 

и он по-прежнему показывает, что это JPG. Я должен упустить что-то очень очевидное, но я был бы признателен за некоторую помощь.

спасибо.

ответ

1

Используйте следующий скрипт для преобразования любого изображения (JPEG, PNG и GIF) в формат PNG. Внимательно прочитайте следующий сценарий, я добавил комментарии на каждом критическом шаге.

// $dir specifies the directory where you upload your image files 

// get the file by it's temporary name 
$tmp_file_name = $_FILES['image']['tmp_name']; 

// get the file extension 
$ext = strtolower(pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION)); 

// specify the whole path here 
$actual_file_name = $dir . basename($_FILES['image']['name'], "." . $ext) . ".png"; 

// check whether a valid image is uploaded or not 
if(getimagesize($tmp_file_name)){ 

    // get the mime type of the uploaded image 
    $image_array = getimagesize($tmp_file_name); 
    $mime_type = $image_array['mime']; 

    // get the height and width of the uploaded image 
    list($width_orig, $height_orig) = getimagesize($tmp_file_name); 
    $width = $width_orig; 
    $height = $height_orig; 

    if($mime_type == "image/gif"){ 
     // create a new true color image 
     if($image_p = imagecreatetruecolor($width, $height)){ 

      // create a new image from file 
      if($image = imagecreatefromgif($tmp_file_name)){ 

       // copy and resize part of an image with resampling 
       if(imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig)){ 

        if(imagepng($image_p, $actual_file_name, 0)){ 
         // image is successfully uploaded 
         // free resources 
         imagedestroy($image_p); 
         imagedestroy($image); 

         // perform the insert operation and get the last inserted id 
         // $lastinsertID = XXXX 

         // new file name 
         $filename = $dir . $lastinsertID . basename($_FILES['image']['name'], "." . $ext) . ".png"; 

         //move the file to your desired location 
         if(rename($actual_file_name, $filename)){ 
          echo "success"; 
         }else{ 
          echo "error"; 
         } 

        }else{ 
         //Destroy both image resource handler 
         imagedestroy($image); 
         imagedestroy($image_p); 
         echo "Error"; 
        } 
       }else{ 
        //Destroy both image resource handlers 
        imagedestroy($image); 
        imagedestroy($image_p); 
        echo "Error"; 
       } 
      }else{ 
       //destroy $image_p image resource handler 
       imagedestroy($image_p); 
       echo "Error"; 
      } 
     }else{ 
      echo "Error"; 
     } 
    }elseif($mime_type == "image/png"){ 
     // the uploaded image is already in .png format 
     if(move_uploaded_file($tmp_file_name, $actual_file_name)){ 

      // perform the insert operation and get the last inserted id 
      // $lastinsertID = XXXX 

      // new file name 
      $filename = $dir . $lastinsertID . $_FILES['image']['name']; 

      //move the file to your desired location 
      if(rename($actual_file_name, $filename)){ 
       echo "success"; 
      }else{ 
       echo "error"; 
      } 

     }else{ 
      echo "error"; 
     } 
    }elseif($mime_type == "image/jpeg"){ 
     // create a new true color image 
     if($image_p = imagecreatetruecolor($width, $height)){ 

      // create a new image from file 
      if($image = imagecreatefromjpeg($tmp_file_name)){ 

       // copy and resize part of an image with resampling 
       if(imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig)){ 

        if(imagepng($image_p, $actual_file_name, 0)){ 
         // image is successfully uploaded 
         // free resources 
         imagedestroy($image_p); 
         imagedestroy($image); 

         // perform the insert operation and get the last inserted id 
         // $lastinsertID = XXXX 

         // new file name 
         $filename = $dir . $lastinsertID . basename($_FILES['image']['name'], "." . $ext) . ".png"; 

         //move the file to your desired location 
         if(rename($actual_file_name, $filename)){ 
          echo "success"; 
         }else{ 
          echo "error"; 
         } 

        }else{ 
         //Destroy both image resource handler 
         imagedestroy($image); 
         imagedestroy($image_p); 
         echo "Error"; 
        } 
       }else{ 
        //Destroy both image resource handlers 
        imagedestroy($image); 
        imagedestroy($image_p); 
        echo "Error"; 
       } 
      }else{ 
       //destroy $image_p image resource handler 
       imagedestroy($image_p); 
       echo "Error"; 
      } 
     }else{ 
      echo "error_An unexpected error has been occured. Please try again later."; 
     } 
    }else{ 
     echo "Only JPEG, PNG and GIF images are allowed."; 
    } 

}else{ 
    echo "Bad image format"; 
} 
+0

Ничего себе это здорово! Спасибо! Я буду работать над реализацией и вернуться к вам. Спасибо огромное! Мне может потребоваться несколько дней, чтобы вернуться к нему. – mreynol

+0

@mreynol Добро пожаловать. Сообщите мне о прогрессе. –

+0

Okay Я смог сделать снимок, и он получил гораздо больше. Он преобразовал изображение в PNG !! :). Он также сохранил новое имя изображения в базе данных, но он добавил имя каталога, куда я хочу переместить, в имя файла в базе данных. Кроме того, он не переместил файл в мое местоположение в $ dir. Наконец, я хотел бы получить результирующее изображение (lastinsertID) image1.png (например, 12345image1.png). – mreynol

 Смежные вопросы

  • Нет связанных вопросов^_^