Willi: Viele Bilder mit PHP verkleinern - beste Lösung?

Beitrag lesen

Hallo FraFu,

Dann bearbeite pro Durchgang nur genau eine Datei.
Das Script nimmt die erste Datei im verzeichnis und bearbeitet sie. Zum Schluß löscht/verschiebt sie diese.
Dann ruft sich das Script einfach solange selber auf bis keine Dateien mehr vorhanden sein.
Der User muss einfach geduldig warten bis alle Bilder durch sind.

Ah, stimmt. Vielen Dank für den Denkanstoß!
So mache ich es jetzt auch, und es funktioniert einwandfrei :-)

Im Folgenden seht ihr noch mein derzeitiges Script zum Einlesen der Bilder, ihr könnt ja mal drüber gehen und Verbesserungsvorschläge posten.

  
<?php  
  $maxsize = 4; // Maximale Größe der Datei in MB  
  $max_thumb_width = 110;  
  $max_mini_width = 30;  
  $max_mid_width = 500;  
  $uploaddir_short = 'fotos/uploads/'.$_GET['dir'].'/';  
  $movedir_short = 'fotos/'.$_GET['dir'].'/';  
  $uploaddir = ereg_replace("/[a-z, A-Z, 0-9]*.php$", "", $_SERVER['SCRIPT_FILENAME']).'/'.$uploaddir_short; // Ich weiß, das ist sehr unschön... habt ihr bessere Ideen?  
  $movedir = ereg_replace("/[a-z, A-Z, 0-9]*.php$", "", $_SERVER['SCRIPT_FILENAME']).'/'.$movedir_short; // siehe oben  
  
  if(!isset($_GET['dir'])){  
    $directories = scandir($uploaddir_short);  
    foreach($directories AS $directory){  
      if($directory != '.' && $directory != '..')  
        echo '<li><a href="getphotos.php?dir='.$directory.'">'.$directory.'</a></li>';  
    }  
  } else {  
    if(is_string($_GET['dir']) && $_SESSION['rights'] == 'a'){  
      if($files = scandir($uploaddir_short)){  
        foreach($files AS $filename){  
       if(!is_dir($movedir)){  
         mkdir($movedir);  
       }  
       $ext = strstr($filename, ".");  
       if($ext == '.jpg' || $ext == '.JPG' || $ext == '.jpeg'){  
         // Main-Part  
            $exif = exif_read_data($uploaddir.$filename, 0, true);  
            if($exif){  
               $camera = $exif['IFD0']['Make'] . ' ' . $exif['IFD0']['Model'];  
               $shottime = strtotime($exif['EXIF']['DateTimeOriginal']);  
            }  
     mysql_query("INSERT INTO pic2(picname, uploadtime, catname, shottime, camera)  
     VALUES('".$filename."', ".time().", '".$_GET['dir']."', '".$shottime."', '".$camera."')") OR die(mysql_error());  
            $id = mysql_insert_id();  
            $filename_old = $filename;  
            $filename = $_GET['dir'].'_'.$id.'.jpg';  
  
            rename($uploaddir.$filename_old, $uploaddir.$filename); // Benennt die alten IMG_xxx/DESC_xxx-Dateien in name_id.jpg um  
  
            $org_pic = imagecreatefromjpeg($uploaddir.$filename);  
            $org_width = imagesx($org_pic);  
            $org_height = imagesy($org_pic);  
  
            $mid_width = $max_mid_width;  
            $mid_height = ($mid_width/$org_width)*$org_height;  
            $mid = ImageCreateTrueColor($mid_width, $mid_height);  
            if($org_width > $max_mid_width){  
              ImageCopyresampled($mid, $org_pic, 0, 0, 0, 0, $mid_width, $mid_height, $org_width, $org_height);  
              if($mid_height > $mid_width || $mid_width > $mid_width){  
                ImageCopy($mid,$mid,0,0,0,0,$mid_width,$mid_width);  
              }  
            } else {  
              $mid = $org_pic;  
            }  
            ImageJPEG($mid, $movedir."mid_".$filename);  
  
            $thumb_width = $max_thumb_width;  
            $thumb_height = ($thumb_width/$org_width)*$org_height;  
            $thumb = ImageCreateTrueColor($thumb_width, $thumb_height);  
            ImageCopyresampled($thumb, $org_pic, 0, 0, 0, 0, $thumb_width, $thumb_height, $org_width, $org_height);  
            if($thumb_height > 100 || $thumb_width > 100){  
              ImageCopy($thumb,$thumb,0,0,0,0,100,100);  
            }  
            ImageJPEG($thumb, $movedir."thumb_".$filename);  
  
            $mini_width = $max_mini_width;  
            $mini_height = ($mini_width/$org_width)*$org_height;  
            $mini = ImageCreateTrueColor($mini_width, $mini_height);  
            ImageCopyresampled($mini, $org_pic, 0, 0, 0, 0, $mini_width, $mini_height, $org_width, $org_height);  
            if($mini_height > $mini_width || $mini_width > $mini_width){  
              ImageCopy($mini,$mini,0,0,0,0,$mini_width,$mini_width);  
            }  
            ImageJPEG($mini, $movedir."mini_".$filename);  
  
            imagedestroy($org_pic);  
  
            rename($uploaddir.$filename, $movedir.$filename);  
  
            echo '<img src="'.$movedir_short."thumb_".$filename.'" alt="" /> erfolgreich erzeugt!<br />';  
            echo 'Kamera: '.$camera.' - Geschossen: '.$shottime.' ('.date("j.n.Y, H:i",1184319884).')<br />';  
           break;  
       } else {  
            echo 'Die Datei ist keine .jpg-Datei! - '.$filename.'<br />';  
       }  
        }  
      } else {  
        echo 'Dieses Verzeichnis existiert nicht!';  
      }  
    }  
  }  
?>  

Grüße,
Willi