2009-08-08 2 views
0

У меня есть следующий скрипт (он выглядит длинным, но хорошо комментируется). Проблема в том, что я получаю ошибки при попытке загрузить изображение png или gif. Что я могу сделать, чтобы настроить это (если это возможно, легко), чтобы он мог либо работать с png и gif, либо преобразовывать их, прежде чем пытаться работать с ними.Как изменить этот php-скрипт для обработки png и gif-загрузок

Это ошибка, что я Получать

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

Aparently первая часть скрипта работает, сохраняя первоначальную загрузку, но как я должен идти об этом?

$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>'; 
    } 

Любое руководство здесь очень ценится.

ответ

3

Ну, imagecreatefromjpeg() может создавать только изображения из ... jpegs. Существуют сестринские функции для создания изображений из других типов файлов, а именно imagecreatefrompng() и imagecreatefromgif().

Я добавил к вашему коду. Попробуйте. Убедитесь, что вы видите изменения, как я положил в там die() в случае недопустимого изображение, которое не может быть то, что вы хотите:

$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

спасибо так много, работает отлично! Я очень ценю время, которое вы приняли, чтобы помочь мне в этом. – mrpatg

+0

Без проблем, рад, что он работает. :) – zombat