2013-04-15 131 views
0

我已經在我的頁面上爲圖片實現了文件上傳,並嘗試以某種方式生成縮略圖,以便點擊它們以通過fancybox進行查看。上傳工作,但我的功能來創建一個縮略圖不。 (這包含在我的upload.php的,「move_uploaded_file」之後:在上傳後創建縮略圖,PHP

<?php 
$src = $subdir.$fileupload['name']; 

function make_thumb($src) 
{ 

$source_image = imagecreatefromjpeg($src); //For testing purposes only jpeg now 
$width = imagesx($source_image); 
$height = imagesy($source_image); 
$desired_width = 220; 

$desired_height = floor($height * ($desired_width/$width)); 

$virtual_image = imagecreatetruecolor($desired_width, $desired_height); 

imagecopyresampled($virtual_image, $source_image, 0, 0, 0, 0, $desired_width, $desired_height, $width, $height); 

header("Content-type: image/jpeg"); 
imagejpeg($virtual_image, realpath('./Thumbnails/filename.jpg')); //Temporary filename, will be changed 
} 
?> 

僅供參考,這是一個任務,因爲我是一個PHP初學者,我也用谷歌,但找不到在我的情況的問題。也許我的PHP的理解是缺乏太多。

+0

請允許錯誤報告,因此您可以開始從學習PHP試圖告訴你的問題。 – Xeoncross

+0

出了什麼問題?有沒有錯誤,或者它只是沒有按預期發揮作用? – showdev

+0

1)會做什麼,需要檢查我可以如何啓用錯誤報告。 2.)沒有錯誤,什麼也沒有發生,我覺得奇怪,因爲我的經驗與PHP已加上大量的錯誤信息 – Necroteuch

回答

0

使用此img_resize功能,它是良好的最流行的圖像格式

function img_resize($src, $dest, $width, $height, $rgb = 0xFFFFFF, $quality = 100) 
    { 
     if (!file_exists($src)) 
      return false; 

     $size = getimagesize($src); 

     if ($size === false) 
      return false; 

     $format = strtolower(substr($size['mime'], strpos($size['mime'], '/') + 1)); 
     $icfunc = "imagecreatefrom" . $format; 
     if (!function_exists($icfunc)) 
      return false; 

     $x_ratio = $width/$size[0]; 
     $y_ratio = $height/$size[1]; 

     $ratio = min($x_ratio, $y_ratio); 
     $use_x_ratio = ($x_ratio == $ratio); 

     $new_width = $use_x_ratio ? $width : floor($size[0] * $ratio); 
     $new_height = !$use_x_ratio ? $height : floor($size[1] * $ratio); 
     $new_left = $use_x_ratio ? 0 : floor(($width - $new_width)/2); 
     $new_top = !$use_x_ratio ? 0 : floor(($height - $new_height)/2); 

     $isrc = $icfunc($src); 
     $idest = imagecreatetruecolor($width, $height); 

     imagefill($idest, 0, 0, $rgb); 

     if (($format == 'gif') or ($format == 'png')) { 
      imagealphablending($idest, false); 
      imagesavealpha($idest, true); 
     } 

     if ($format == 'gif') { 
      $transparent = imagecolorallocatealpha($idest, 255, 255, 255, 127); 
      imagefilledrectangle($idest, 0, 0, $width, $height, $transparent); 
      imagecolortransparent($idest, $transparent); 
     } 

     imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0, $new_width, $new_height, $size[0], $size[1]); 

     getResultImage($idest, $dest, $size['mime']); 

     imagedestroy($isrc); 
     imagedestroy($idest); 

     return true; 
    } 

    function getResultImage($dst_r, $dest_path, $type) 
    { 
     switch ($type) { 
      case 'image/jpg': 
      case 'image/jpeg': 
      case 'image/pjpeg': 
       return imagejpeg($dst_r, $dest_path, 90); 
       break; 
      case 'image/png'; 
       return imagepng($dst_r, $dest_path, 2); 
       break; 
      case 'image/gif'; 
       return imagegif($dst_r, $dest_path); 
       break; 
      default: 
       return; 
     } 
    } 
+0

你能解釋一下問題是什麼? –

+0

@JuanMendes這是不是一個問題,它是desicion :) – zavg

+0

整個mime/function_exists的東西是毫無意義的,可以簡單地'imagecreatefromstring(readfile($ src))' –