2015-12-23 2 views
1

J'essaye de convertir un JPG (bien n'importe quelle image) en PNG. J'ai un formulaire HTML qui affiche l'image très bien sur le serveur. J'ai besoin de renommer ce fichier et aussi le convertir en PNG. Plus tard dans mon code après avoir fait une insertion de base de données de table liée, je renommer le fichier encore une fois pour ajouter l'ID d'enregistrement au nom de fichier pour assurer son unicité. Je suis plus un programmeur objectif C que PHP, donc je me bats ici avec ce code que j'ai trouvé dans d'autres questions qui ne semblent pas fonctionner pour moi.PHP Convertir l'image POST en PNG

est ici print_r($_FILES);

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

Alors, je veux le convertir en PNG et renommer BBnL9Ho.jpg to image1.png. Je l'ai essayé d'utiliser le code suivant, mais en vain:

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

plus tard après que je fais une table de base de données associée INSERT, je change le nom à nouveau et ajouter l'ID de l'enregistrement de base de données associée (je stocke le nom du fichier table séparée puis reste des données de formulaire en raison d'un à plusieurs):

$fileName="$lastinsertID".$newfileName; 

puis-je insérer ce nom dans la base de données qui entre correctement. Je dois ensuite déplacer le fichier vers un répertoire de téléchargement que j'essaie de faire comme suit:

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

Voici où est mon problème. Le fichier ne bouge pas et quand je vérifie les attributs du fichier, il semble qu'il n'ait pas réellement converti le fichier. Je l'utilise pour vérifier le type:

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

et il montre encore qu'il s'agit d'un fichier JPG. Je dois manquer quelque chose de très évident mais j'apprécierais de l'aide.

Merci beaucoup. Utilisez le script suivant pour convertir une image (JPEG, PNG et GIF) au format PNG.

Répondre

1

Utilisez le script suivant pour convertir n'importe quelle image (JPEG, PNG et GIF) au format PNG. Parcourez attentivement le script suivant, j'ai ajouté des commentaires à chaque étape critique.

// $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

Wow, c'est génial! Je vous remercie! Je vais travailler sur la mise en œuvre et revenir vers vous. Merci beaucoup! Il me faudra peut-être quelques jours pour y revenir. – mreynol

+0

@mreynol De rien. Faites-moi savoir sur les progrès. –

+0

D'accord, j'ai été capable de donner un coup de feu et c'est allé beaucoup plus loin. Il a converti l'image en PNG !! :) Il stockait également le nouveau nom d'image dans la base de données, mais il avait ajouté le nom du répertoire dans lequel je voulais le déplacer, au nom de fichier dans la base de données. En outre, il n'a pas déplacé le fichier vers mon emplacement $ dir. Enfin, je voudrais que l'image résultante soit (lastinsertID) image1.png (par exemple 12345image1.png). – mreynol