Bilderupload, Resizen und mit Wasserzeichen versehen

hallo zusammen,

ich habe ein kleines Problemchen. bisher habe ich ein Uploadformular erstellt, welches mir einen Upload ermöglicht und das Bild in 700x500 resized und zusätzlich noch mit einem Wasserzeichen versehen tut und unter einem bestimmten Namen speichert.

Wie kann ich das Programmieren, dass das Vorhaben mit mehreren Bildern möglich ist?

<?php
session_start();

   if( isset($_POST['submit']) ) {
      include('SimpleImage.php');
	  
      $image = new SimpleImage();
      $image->load($_FILES['uploaded_image']['tmp_name']);
	  $image->resize (700, 525); 
	  $image->save('bilder/Bild_01.JPG');
	  
header('Content-type: image/jpeg');	  
	  
//Bilder in Variablen Laden
$Grafik = ImageCreateFromJPEG("bilder/Bild_01.JPG");


//Wasserzeichen erstellen
$im = imagecreate (265, 28);
//Hintergrundfarbe - Grau = 207,207,207
$black = ImageColorAllocate ($im, 207, 207, 207);
//Schriftfarbe - Schwarz = 0,0,0
$white = ImageColorAllocate ($im, 0, 0, 0);
//ImageTTFText ($im, 20, 0, 10, 20, $white, "VERDANA.TTF",
ImageTTFText ($im, 11, 0, 10, 20, $white, $_SERVER['DOCUMENT_ROOT']."/upload_bilder/VERDANA.TTF",
"© t123.de.de - 2010");

//Bearbeitung
ImageCopy($Grafik, $im,
imagesx($Grafik)-imagesx($im),
imagesy($Grafik)-imagesy($im), 0, 0,
imagesx($im),
imagesy($im));

//Bilder ausgabe
imagejpeg($Grafik);

//Bild Speichern
imagejpeg($Grafik, "bilder/Bild_01.JPG");	  


   } else {
?>
<p>Bilderupload mit gleichzeitigem Verkleinern und Wasserzeichen versehen</p>

   <form action="upload.php" method="post" enctype="multipart/form-data">
      <p>
	  Bild 1: <input type="file" name="uploaded_image" /><br>
	  <input type="submit" name="submit" value="Upload" />
	  </p>
   </form>

<?php
   }
?>

Nun, in dem Formular kannst du doch mehrere input-Elemente
jeweils mit eigenem Namen angeben und dann bei der
Verarbeitung die jeweiligen Namen der Reihe nach in einer
Schleife abarbeiten.

Nach Fertigstellung eines Bildes sollte man dann vorsichtshalber
den Speicher explizit freigeben.
Zudem ist zu bedenken, daß die Verarbeitungszeit für ein
PHP-Skript auf ein paar Sekunden begrenzt ist, allzu viele Bilder
wird man da also nicht auf einmal bearbeiten können. Da ist es
effektiver, das daheim auf dem lokalen Rechner zu machen und
dann die fertigen Bilder hochzuladen, ohne sie noch per PHP
bearbeiten zu müssen.

so hab mal wieder ein wenig zeit gefunden

bild hochladen, wasserzeichen versehen und neu abspeichern geht.
resizen nicht, an welcher stelle sollte ich was und wie einfügen?

weitere frage, ist es möglich dass ich beim formluar einen ordner angeben kann, in welchem die bilder dann nach bearbeiten gespeichert werden

<?php
    error_reporting(E_ALL);

    // Funktionen definieren
    // -----------------------------------------------
    function checkUpload($myFILE, $file_extensions, $mime_types, $maxsize)
    {
        $errors = array();
        // Uploadfehler prüfen
        switch ($myFILE['error']){
            case 1: $errors[] = "Bitte wählen Sie eine Datei aus, die <b>kleiner als ".ini_get('upload_max_filesize')."</b> ist.";
                    break;
            case 2: $errors[] = "Bitte wählen Sie eine Datei aus, die <b>kleiner als ".$maxsize/(4096*4096)." MB</b> ist.";
                    break;
            case 3: $errors[] = "Die Datei wurde nur teilweise hochgeladen.";
                    break;
            case 4: $errors[] = "Es wurde keine Datei ausgewählt.";
                    return $errors;
                    break;
            default : break;
        }
        // MIME-Type prüfen
        if(count($mime_types)!=0 AND !in_array(strtolower($myFILE['type']), $mime_types)){
            $fehler = "Falscher MIME-Type (".$myFILE['type'].").<br />".
                      "Erlaubte Typen sind:<br />\n";
            foreach($mime_types as $type)
                $fehler .= " - ".$type."\n<br />";
            $errors[] = $fehler;
        }
        // Dateiendung prüfen
        if($myFILE['name']=='' OR (count($file_extensions)!=0 AND !in_array(strtolower(getExtension($myFILE['name'])), $file_extensions))){
            $fehler = "Falsche Dateiendung (".getExtension($myFILE['name']).").<br />".
                      "Erlaubte Endungen sind:<br />\n";
            foreach($file_extensions as $extension)
                $fehler .= " - ".$extension."\n<br />";
            $errors[] = $fehler;
        }
        // Dateigröße prüfen
        if($myFILE['size'] > $maxsize){
            $errors[] = "Datei zu groß (".sprintf('%.2f',$myFILE['size']/(4096*4096))." MB).<br />".
                        "Erlaubte Größe: ".$maxsize/(4096*4096)." MB\n";
        }
        return $errors;
    }

    // gibt die Dateiendung einer Datei zurück
    function getExtension ($filename)
    {
        if(strrpos($filename, '.'))
             return substr($filename, strrpos($filename, '.')+1);
        return false;
    }

    // erzeugt einen Zufallswert
    function getRandomValue()
    {
        return substr(md5(rand(1, 9999)),0,8).substr(time(),-6);
    }

    // erzeugt einen neuen Dateinamen aus Zufallswert und
    // Dateiendung
    function renameFile ($filename)
    {
        return  getRandomValue().".".getExtension($filename);
    }

    // Werte zur Dateiprüfung initialisieren
    // -----------------------------------------------
    $maxsize = 2*4096*4096;
    $file_extensions = array('jpg', 'jpeg');
    $mime_types = array('image/pjpeg', 'image/jpeg');

    // Upload-Ordner definieren
    // -----------------------------------------------
    $ordner = "bilder/";
   $font_path = "font/VERDANA.TTF";
   
   // Anzahl der Datefelder
    $anzahl_dateifelder = 5;

    // Beginn des Skriptes
    // -----------------------------------------------
    echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \n".
         "\"http://www.w3.org/TR/html4/strict.dtd\">\n";
    echo "<html>\n";
    echo "<head>\n";
    echo " <title>multipler Datei-Upload</title>\n";
    echo "</head>\n";
    echo "<body>\n";

    // Falls der Benutzer auf "Upload" gedrückt hat,
    // werden die Dateien überprüft
    if(isset($_POST['submit']) AND $_POST['submit']=='Upload'){

        // jede Datei einzeln testen
        for($i=0; $i<$anzahl_dateifelder; $i++){
            $myFILE['name'] = $_FILES['Datei']['name'][$i];
            $myFILE['type'] = $_FILES['Datei']['type'][$i];
            $myFILE['tmp_name'] = $_FILES['Datei']['tmp_name'][$i];
            $myFILE['error'] = $_FILES['Datei']['error'][$i];
            $myFILE['size'] = $_FILES['Datei']['size'][$i];

            // Fehlerarray erzeugen
            $errors = array();

            $errors = checkUpload($myFILE, $file_extensions, $mime_types, $maxsize);
            if(count($errors)){
                echo "<p>\n".
                     "Die ".($i+1).". Datei (".$myFILE['name'].") konnte nicht gespeichert werden.<br />\n";
                foreach($errors as $error)
                    echo $error."<br />\n";
                echo "</p>\n";
            }
            else {
                     
                do {
                    $neuer_name = renameFile($myFILE['name']);
                } while(file_exists($ordner.$neuer_name));               
                if(@move_uploaded_file($myFILE['tmp_name'], $ordner.$neuer_name)){
                     echo "<p>\n".
                          "Die ".($i+1).". Datei (".$myFILE['name'].") wurde erfolgreich gespeichert.<br />\n".
                          "</p>\n";
                   
                     //Bilder in Variablen Laden
                     $Grafik = ImageCreateFromJPEG($ordner.$neuer_name);


                     //Wasserzeichen erstellen
                     $im = imagecreate (165, 10);
                     //Hintergrundfarbe - Grau = 207,207,207
                     $black = ImageColorAllocate ($im, 255, 255, 255);
                     //Schriftfarbe - Schwarz = 0,0,0
                     $white = ImageColorAllocate ($im, 0, 0, 0);
                     //ImageTTFText ($im, 20, 0, 10, 20, $white, "VERDANA.TTF",
                     ImageTTFText ($im, 8, 0, 1, 9, $white, $font_path,
                     "copyright DeinName - 2010");

                     //Bearbeitung
                     ImageCopy($Grafik, $im,
                     imagesx($Grafik)-imagesx($im),
                     imagesy($Grafik)-imagesy($im), 0, 0,
                     imagesx($im),
                     imagesy($im));

                     //Bilder ausgabe
                     //imagejpeg($Grafik);

                     //Bild Speichern
                     imagejpeg($Grafik, "bilder/$neuer_name");                  

                }
                else{
                     echo "<p>\n".
                          "Die Die ".($i+1).". Datei (".$myFILE['name'].") konnte nicht gespeichert werden.<br />\n".
                          "Es ist ein Upload-Fehler aufgetreten.<br />\n".
                          "Bitte versuchen Sie es später erneut.<br />\n".
                          "<br />\n".
                          "Sollte der Upload noch immer nicht funktionieren, informieren Sie uns bitte per Email.<br />\n".
                          "<a href=\"".$_SERVER['PHP_SELF']."\">Zurück zum Upload-Formular</a>\n".
                          "</p>\n";
                }
            }
        }
        echo "<p>\n".
             "<a href=\"".$_SERVER['PHP_SELF']."\">Zurück zum Upload-Formular</a>\n".
             "</p>\n";
    }
    // Beim ersten Aufruf des Skriptes wird das
    // Upload-Formular angezeigt
    else{
        echo "<h1>Laden Sie mehrere Bilder hoch!</h1>\n";
        echo "<h2>Erlaubte Dateiendungen sind:</h2>\n";
        foreach($file_extensions as $extension)
            echo " ".$extension.", \n";
        echo "<h2>Erlaubte Dateigröße:</h2>\n";
        echo " - maximal ".($maxsize/(4096*4096))." MB\n<br />";
        echo " <form ".
             "action=\"".$_SERVER['PHP_SELF']."\" ".
             "method=\"post\" ".
             "enctype=\"multipart/form-data\">\n";
        echo "  <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"".$maxsize."\" />\n";
        for($i=0; $i<$anzahl_dateifelder; $i++){
            echo "  <label for=\"Datei\">".($i+1).". Datei auswählen</label>\n";
            echo "  <input type=\"file\" name=\"Datei[".$i."]\" id=\"Datei[".$i."]\" />\n";
            echo "  <br />\n";
        }
        echo "  <input type=\"submit\" name=\"submit\" value=\"Upload\" />\n";
        echo " </form>\n";
    }

    echo "</body>\n";
    echo "</html>\n";
?>

[quote=“tobsp”]bild hochladen, wasserzeichen versehen und neu abspeichern geht.
resizen nicht, an welcher stelle sollte ich was und wie einfügen?[/quote]
Eine dafür geeignete Funktion, an einer geeigneten Stelle im Ablauf.

Welche fallen dir da ein, wenn du dir die Grafikfunktionen im Handbuch anschaust?

Klar. Woran scheiterst du dabei?

Den User selber einen eintippen lassen, ist vielleicht nicht so clever.
Also vielleicht eine Auswahlliste mit dafür vorgesehenen Verzeichnissen? (Den übergebenen Wert musst du dann natürlich serverseitig wieder überprüfen, bzw. in ein Verzeichnis aus einer vorgegebenen Liste übersetzen.)

Ich möchte schon, dass derjenige der ein oder mehrere Bilder hochläd, den Orner definieren kann. Also im Prinzip nur den Unterordner. Ich lege einen Ordner names Bilder auf meinen Webspace und in den Ordner kommt dann ein neuer Ordner, welcher der jenige beim hochladen dann anlegen soll, in diesen sollen dann die Bilder gespeichert werden

Im Formular muß ich dann zusätzlich noch folgendes einbauen, nicht war?

und das muß ich auch noch einbauen, weiter oben im script.

wie ist es mit Ordner erstellen, muß ich da och mkdir einbauen?

Natürlich musst du den Ordner noch mit einer geeigneten Funktion erstellen.
Allerdings solltest du das erst machen, nachdem du den Ordnernamen gründlich geprüft hast. Worauf zu achten ist, darüber hast du dir schon Gedanken gemacht?

Ausserdem solltest du noch überlegen, ob und ggf. wie du verhindern willst, dass ein Nutzer den bereits bestehenden Ordner eines anderen Nutzers verwendet.

und worauf sollte man da achten?

Darauf, dass man sowas nicht leichtsinnig umsetzt, bevor man wenigstens soviel Erfahrung hat, dass man sich diese Frage eigentlich schon selbst beantworten kann …

Z.B. darauf, dass der Nutzer keinen Verzeichnisnamen angibt, der aus dem für die Bildablage vorgesehenen Oberverzeichnis herausführt (mittels …/irgendwas beispielsweise).

bekomme nun zwei fehlermeldungen

Notice: Undefined index: ordner in

Warning: mkdir() [function.mkdir]: Permission denied in /