2010-05-30 110 views
0

我有這個源代碼,我從淨Tutsplus它。我已經配置了它並使它在一個PHP文件中工作。它可以通過傳送原始圖像來工作,但它不會生成縮略圖文件夾。創建縮略圖PHP問題

<?php 

$final_width_of_image = 100; 
$path_to_image_directory = "../../img/events/" . urldecode($_GET['name']) . "/"; 
$path_to_thumbs_directory = "../../img/events/" . urldecode($_GET['name']) . "/thumbnails/"; 

function createThumbnail($filename) 
{ 
    if(preg_match('/[.](jpg)$/', $filename)) 
    { 
     $im = imagecreatefromjpeg($path_to_image_directory . $filename); 
    } 
    elseif(preg_match('/[.](gif)$/', $filename)) 
    { 
     $im = imagecreatefromgif($path_to_image_directory . $filename); 
    } 
    elseif(preg_match('/[.](png)$/', $filename)) 
    { 
     $im = imagecreatefrompng($path_to_image_directory . $filename); 
    } 

    $ox = imagesx($im); 
    $oy = imagesy($im); 

    $nx = $final_width_of_image; 
    $ny = floor($oy * ($final_width_of_image/$ox)); 

    $nm = imagecreatetruecolor($nx, $ny); 

    imagecopyresized($nm, $im, 0,0,0,0,$nx,$ny,$ox,$oy); 

    imagejpeg($nm, $path_to_thumbs_directory . $filename); 
    $tn = '<img src="' . $path_to_thumbs_directory . $filename . '" alt="image" />'; 
    echo $tn; 
} 

if(isset($_FILES['fupload'])) { 

    if(preg_match('/[.](jpg)|(gif)|(png)$/', $_FILES['fupload']['name'])) { 

     $filename = $_FILES['fupload']['name']; 
     $source = $_FILES['fupload']['tmp_name']; 
     $target = $path_to_image_directory . $filename; 

     move_uploaded_file($source, $target); 

     createThumbnail($filename); 
    } 
} 

?> 

基本上它應該生成上傳圖像的縮略圖並將原始圖像存儲到不同的文件夾中。

路徑是正確的,它的工作原理是通過獲取URL中的文件夾名稱,它確實有效,但對縮略圖文件夾無效。

之前你問這個相關的問題,是的,縮略圖生成在我的服務器上由PHP GD工作,我已經單獨測試了它。所以這不是問題。 :)

我如何得到這個工作? :(

+0

是否有任何錯誤或只是顯示什麼? – miku 2010-05-30 12:40:59

+0

縮略圖文件夾是否存在並且是否具有正確的權限?你有沒有收到任何錯誤信息? – 2010-05-30 12:44:14

+0

它顯示的圖像,但它沒有縮小到縮略圖大小。權限很好。 – MacMac 2010-05-30 12:47:31

回答

2

嗯,首先,使用imagecopyresampled(),因爲它會產生更好的縮略圖。

其次,你不應該使用相同的變量文件系統目錄,並在網址的目錄。你應該有$filesystem_path_to_thumbs$url_path_to_thumbs所以你可以以不同的方式設置它們

第三,你可能想要對寬度和高度進行大小檢查如果有人上傳高圖像會發生什麼?你的縮略圖將在目標框外(但是這可能不會是個大問題)

四,你應該親b進行檢查,看是否縮略圖文件中的拇指目錄中生成的縮略圖(由於性能原因)之前...

最後,它實際上是失敗的原因,是$final_width_of_image$path_to_image_directory$path_to_thumbs_directory未於規定功能。或者:

  1. 讓他們在功能開始全球,這樣你就可以訪問它們的函數內global $final_width_of_image, $path_to_image_directory, $path_to_thumbs_directory;

  2. 讓他們函數的自變量:function createTumbnail($image, $width, $path_to_images, $path_to_thumbs) {

  3. 硬編碼它們(將函數外部的聲明移動到函數內部)。

就個人而言,我會做#2,但它給你的要求和需要是...

+0

你能按照它應該與你的建議一起編輯我的代碼,我只需要這樣做。 – MacMac 2010-05-30 13:33:16

+0

我認爲我給你的東西應該足以找出需要做的事情。如果你對某件事感到困惑,詢問一下你感到困惑的事情。 – ircmaxell 2010-05-30 14:12:37