php küçük oluşturmak için tüm dosyaları ve dizinleri arama

2 Cevap

Ben dosyaları arama ve jpg dosyaları görüntüler oluşturmak istiyorum. Kod var:

$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 ($hvele = opendir($n_dir)) {
        create_fcat($fn, $width, $direction2, $hvele);
      }
    } 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 = imagecreatetruerenk( $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);
}

Sorun: Örneğin bu dosyalar olduğunda:

  • MAIN
    • image1.jpg
    • FOLDER1
      • image2.jpg
      • FOLDER 1.1
        • Image3.jpg

Dosyalar image1.jpg ve image2.jpg yüklü, ama Image3.jpg değildir vardır - KLASÖR 1.1 dosyası olarak kabul edilir gibi görünüyor. Bunu nasıl düzeltebilirim?

2 Cevap

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

Bu tüm bir dizindeki dosyaları ve tüm alt-dizinleri verecek, daha sonra istediğiniz gibi her görüntüyü yeniden boyutlandırabilirsiniz. I belli GD daha yaygın yüklenmiş sonuçları genel GD fakat daha iyi olduğunu düşünüyorum ben her zaman bunun için kendimi imagmagick kullanın.

Ben iki ayrı işlevi kullanabilirsiniz:

  1. Fonksiyon A, belirli bir görüntü dosyasından bir küçük resim oluşturmak için.
  2. Function B to read the entries of a directory and
    • işlevini çağırır A girişi bir görüntü dosyası ise veya
    • işlevini çağırır B girdisi de bir dizin olup olmadığını.

Sonra test edebilirsiniz ve ayrı ayrı her iki işlevi çimdik.