2009-10-17 47 views
1

我想搜索文件並從jpg文件創建圖像。有代碼:搜索所有的文件和目錄在php中創建縮略圖

$dir2 = opendir($direction2); 
$dir = opendir($direction); 

function create_fcat($direction, $width, $direction2, $dir) { 
    while(false !== ($fn = readdir($dir))) { 
    $n_dir = $direction.'/'.$fn; 
    if (is_dir($n_dir) && $fn != '.' && $fn != '..') { 
     if ($handle = opendir($n_dir)) { 
     create_fcat($fn, $width, $direction2, $handle); 
     } 
    } elseif ($fn != '.' && $fn != '..') { 
     $ext = strtolower(substr($fn,strlen($fn)-3)); 
     if ($ext == 'jpg') { 
     if ($img = imagecreatefromjpeg($direction.'/'.$fn)) { 
      $width_original = imagesx($img); 
      $height_original = imagesy($img); 
      if ($width_original > $height_original) { 
      $new_width = $width; 
      $new_height = floor($height_original * ($width/$width_original)); 
      } else { 
      $new_height = $width; 
      $new_width = floor($width_original * ($width/$height_original)); 
      } 
      $tmp_img = imagecreatetruecolor($new_width, $new_height); 
      imagecopyresized($tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width_original, $height_original); 
      imagejpeg($tmp_img, $direction2.'/large/'.$fn); 
     } else { 
      echo '<p>The file cannot be loaded.</p>'; 
     } 
     } 
    } 
    } 
    closedir($dir); 
} 

的問題是:當例子,我們有以下文件:

  • 主要
    • image1.jpg
    • FOLDER1
      • image2.jpg
      • 文件夾1。 1
        • image3.jpg

文件image1.jpg和image2.jpg加載,但image3.jpg不是 - 它看起來像文件夾1.1被視爲文件。我該如何解決它?

回答

5
$path = '/your/top/level/dir'; 

$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST); 
foreach ($objects as $fileinfo) { 
    if ($fileinfo->isFile()) { 
     echo $fileinfo->getFilename() . "\n"; 
     $fullpath = $fileinfo->getPathname(); // full path to image for resizing 
    } 
} 

這將使你在一個目錄下的所有文件和所有子目錄,然後你可以調整每個圖像,如你所願。我總是用imagmagick來做這件事,因爲我認爲結果通常比GD好,但顯然GD更常用。

0

我會使用兩個單獨的函數:

  1. 功能一個從一個特定的圖像文件創建縮略圖。
  2. 功能讀取目錄的條目和
    • 調用函數如果條目是一個圖像文件,或者
    • 調用函數如果條目也是一個目錄。

然後你就可以測試並單獨調整兩種功能。

相關問題