2009-08-08 8 views
0

J'ai le script suivant (il semble long, mais bien commenté). Le problème est, j'obtiens des erreurs quand j'essaye de télécharger une image de png ou de gif. Que puis-je faire pour ajuster cela (facile si possible) de sorte qu'il peut soit travailler avec png et gif ou les convertir avant d'essayer de travailler avec eux.comment modifier ce script PHP pour gérer les téléchargements png et gif

Ceci est l'erreur que je reçois

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg: JPEG library reports unrecoverable error 

Aparently la première partie du script fonctionne, enregistrer le téléchargement d'origine, mais comment dois-je aller à ce sujet?

$idir = "images/"; // Path To Images Directory 
$tdir = "images/"; // Path To Thumbnails Directory 
$twidth = "125"; // Maximum Width For Thumbnail Images 
$theight = "100"; // Maximum Height For Thumbnail Images 


$url = $_FILES['imagefile']['name']; // Set $url To Equal The Filename For Later Use 
    if ($_FILES['imagefile']['type'] == "image/jpg" || $_FILES['imagefile']['type'] == "image/jpeg" || $_FILES['imagefile']['type'] == "image/pjpeg" || $_FILES['imagefile']['type'] == "image/png" || $_FILES['imagefile']['type'] == "image/gif") { 
    $file_ext = strrchr($_FILES['imagefile']['name'], '.'); // Get The File Extention In The Format Of , For Instance, .jpg, .gif or .php 
     $fdate = date('ssU'); 
     $copy = copy($_FILES['imagefile']['tmp_name'], "$idir" . $fdate . "$file_ext"); // Move Image From Temporary Location To Permanent Location 
    if ($copy) { // If The Script Was Able To Copy The Image To It's Permanent Location 
     print 'Image uploaded successfully.<br />'; // Was Able To Successfully Upload Image 
     $simg = imagecreatefromjpeg("$idir" . "$fdate" . "$file_ext"); // Make A New Temporary Image To Create The Thumbanil From 
     $currwidth = imagesx($simg); // Current Image Width 
     $currheight = imagesy($simg); // Current Image Height 
     if ($currheight > $currwidth) { // If Height Is Greater Than Width 
     $zoom = $twidth/$currheight; // Length Ratio For Width 
     $newheight = $theight; // Height Is Equal To Max Height 
     $newwidth = $currwidth * $zoom; // Creates The New Width 
     } else { // Otherwise, Assume Width Is Greater Than Height (Will Produce Same Result If Width Is Equal To Height) 
     $zoom = $twidth/$currwidth; // Length Ratio For Height 
     $newwidth = $twidth; // Width Is Equal To Max Width 
     $newheight = $currheight * $zoom; // Creates The New Height 
     } 
     $dimg = imagecreate($newwidth, $newheight); // Make New Image For Thumbnail 
     imagetruecolortopalette($simg, false, 256); // Create New Color Pallete 
     $palsize = ImageColorsTotal($simg); 
     for ($i = 0; $i < $palsize; $i++) { // Counting Colors In The Image 
     $colors = ImageColorsForIndex($simg, $i); // Number Of Colors Used 
     ImageColorAllocate($dimg, $colors['red'], $colors['green'], $colors['blue']); // Tell The Server What Colors This Image Will Use 
     } 
     imagecopyresized($dimg, $simg, 0, 0, 0, 0, $newwidth, $newheight, $currwidth, $currheight); // Copy Resized Image To The New Image (So We Can Save It) 
      $fdate = date('ssU'); 
      imagejpeg($dimg, "$tdir" . "thumb_" . $fdate . "$file_ext"); // Saving The Image 

       $full = "$fdate" . "$file_ext"; 
       $thumb = "thumb_" . $fdate . "$file_ext"; 

     imagedestroy($simg); // Destroying The Temporary Image 
     imagedestroy($dimg); // Destroying The Other Temporary Image 
     print 'Image thumbnail created successfully.'; // Resize successful 
    } else { 
     print '<font color="#FF0000">ERROR: Unable to upload image.</font>'; // Error Message If Upload Failed 
    } 
    } else { 
    print '<font color="#FF0000">ERROR: Wrong filetype (has to be a .jpg or .jpeg. Yours is '; // Error Message If Filetype Is Wrong 
    print $file_ext; // Show The Invalid File's Extention 
    print '.</font>'; 
    } 

Toute recommandation ici est grandement appréciée.

Répondre

3

Eh bien, imagecreatefromjpeg() peut uniquement créer des images à partir de ... jpegs. Il existe des fonctions soeurs pour créer des images à partir d'autres types de fichiers, à savoir imagecreatefrompng() et imagecreatefromgif().

J'ai ajouté à votre code. Essaie. Assurez-vous de voir les changements, que je mets un die() là-bas dans le cas d'une image non valide, qui ne peut être ce que vous voulez:

$url = $_FILES['imagefile']['name']; // Set $url To Equal The Filename For Later Use 
    if ($_FILES['imagefile']['type'] == "image/jpg" || $_FILES['imagefile']['type'] == "image/jpeg" || $_FILES['imagefile']['type'] == "image/pjpeg" || $_FILES['imagefile']['type'] == "image/png" || $_FILES['imagefile']['type'] == "image/gif") { 
    $file_ext = strrchr($_FILES['imagefile']['name'], '.'); // Get The File Extention In The Format Of , For Instance, .jpg, .gif or .php 
     $fdate = date('ssU'); 
     $copy = copy($_FILES['imagefile']['tmp_name'], "$idir" . $fdate . "$file_ext"); // Move Image From Temporary Location To Permanent Location 
    if ($copy) { // If The Script Was Able To Copy The Image To It's Permanent Location 
     print 'Image uploaded successfully.<br />'; // Was Able To Successfully Upload Image 
     $cfunction = 'imagecreatefromjpeg';  
     if ($_FILES['imagefile']['type'] == "image/png") { 
     $cfunction = 'imagecreatefrompng'; 
     } else if ($_FILES['imagefile']['type'] == "image/gif") { 
     $cfunction = 'imagecreatefromgif'; 
     } else { 
     die("Invalid image format."); 
     } 
     $simg = $cfunction("$idir" . "$fdate" . "$file_ext"); // Make A New Temporary Image To Create The Thumbanil From 
     $currwidth = imagesx($simg); // Current Image Width 
     $currheight = imagesy($simg); // Current Image Height 
     if ($currheight > $currwidth) { // If Height Is Greater Than Width 
     $zoom = $twidth/$currheight; // Length Ratio For Width 
     $newheight = $theight; // Height Is Equal To Max Height 
     $newwidth = $currwidth * $zoom; // Creates The New Width 
     } else { // Otherwise, Assume Width Is Greater Than Height (Will Produce Same Result If Width Is Equal To Height) 
     $zoom = $twidth/$currwidth; // Length Ratio For Height 
     $newwidth = $twidth; // Width Is Equal To Max Width 
     $newheight = $currheight * $zoom; // Creates The New Height 
     } 
     $dimg = imagecreate($newwidth, $newheight); // Make New Image For Thumbnail 
     imagetruecolortopalette($simg, false, 256); // Create New Color Pallete 
     $palsize = ImageColorsTotal($simg); 
     for ($i = 0; $i < $palsize; $i++) { // Counting Colors In The Image 
     $colors = ImageColorsForIndex($simg, $i); // Number Of Colors Used 
     ImageColorAllocate($dimg, $colors['red'], $colors['green'], $colors['blue']); // Tell The Server What Colors This Image Will Use 
     } 
     imagecopyresized($dimg, $simg, 0, 0, 0, 0, $newwidth, $newheight, $currwidth, $currheight); // Copy Resized Image To The New Image (So We Can Save It) 
       $fdate = date('ssU'); 
       imagejpeg($dimg, "$tdir" . "thumb_" . $fdate . "$file_ext"); // Saving The Image 

         $full = "$fdate" . "$file_ext"; 
         $thumb = "thumb_" . $fdate . "$file_ext"; 

     imagedestroy($simg); // Destroying The Temporary Image 
     imagedestroy($dimg); // Destroying The Other Temporary Image 
     print 'Image thumbnail created successfully.'; // Resize successful 
    } else { 
     print '<font color="#FF0000">ERROR: Unable to upload image.</font>'; // Error Message If Upload Failed 
    } 
    } else { 
    print '<font color="#FF0000">ERROR: Wrong filetype (has to be a .jpg or .jpeg. Yours is '; // Error Message If Filetype Is Wrong 
    print $file_ext; // Show The Invalid File's Extention 
    print '.</font>'; 
    } 
+0

Merci beaucoup, fonctionne parfaitement! J'apprécie vraiment le temps que tu as pris pour m'aider avec ça. – mrpatg

+0

Pas de problème, content que cela fonctionne. :) – zombat

Questions connexes