Finalplayer_Ryu: Thumbnail nach upload eines Bildes erstellen

Es sollen eigentlich alle bekannten Bildformate upgeloadet werden, also gif, jpg, bmp, png. Also nach dem upload habe ich $_FILES["bild"] zur Verfügung und dies sollte gleich verkleinert werden, ich finde mich nur nicht bei den Grafikfunktionen zurecht. Also ein kleiner Hinweis, welche Funktion man da verwendet, würde schon reichen und dann noch was anderes, muss ich selbst zwischen den verschieden Bildformaten unterscheiden und entsprechend weiter vorgehen oder geht das automatisch?

  1. Ahoi Finalplayer_Ryu,

    Es sollen eigentlich alle bekannten Bildformate upgeloadet werden, also gif, jpg, bmp, png. Also nach dem upload habe ich $_FILES["bild"] zur Verfügung und dies sollte gleich verkleinert werden, ich finde mich nur nicht bei den Grafikfunktionen zurecht.

    kommst du soweit klar das die Datei auf dem server gespeichert wird?
    also so wie sie hochgeladen wurde. Wenn ja ist das ja schonmal ein guter
    ansatz.
    Soll das Bild in originalgröße UND als Thumbnail gespeichert werden? oder nur als verkleinerte version? bzw. resized werden?

    Also ein kleiner Hinweis, welche Funktion man da verwendet, würde schon reichen

    hier eine Übersicht aller Grafik-Funktionen: http://de3.php.net/manual/de/ref.image.php

    in deinem Fall bietet sich vll die verwendung von http://de3.php.net/manual/de/function.imagecopyresized.php an

    MfG

    1. Also erstmal danke für die schnelle Antwort, alle Grafikfunktionen habe ich auch schon gefunden, wusste nur nicht welche ich verwenden sollte.

      Ansich habe ich bereits erfolgreich die Bilder gespeichert. Es soll nur die verkleinerte Version gespeichert werden und mir ist grad noch eingefallen, da es egal ist in welchen Format die Bilder gespeichert werden, also zum Beispiel alles in jpeg, geht dann:

      $thumbnail=imagecreatetruecolor($breite, $höhe);
      $original=imagecreatefromFormat;
      imagecopyresized($thumbnail, $original, ...);
      imagejpeg($thumbnail, $Zielverzeichnis.$thumbnailname);

      Also die unterscheidung zwischen den Filetypen kann ich bereits, nun, warum bmp..., keine Ahnung, ich bin nur der arme Progger der alles so machen soll wie angegeben, aber konvertiere dann eh alles in jpeg, also eh egal, da gibs dann halt ne längere Uploadzeit für den User..., ABER was mache ich nun mit einem bmp File oder es könnte auch der Fall eintreten dass jemand ein tiff File uploadet, gibs da keine Funktionen, die entsprechende Ressourcen erzeugen wie imagecreatefromjpeg?

      1. Ähhh, ja, also danke an alle die mir bisher geholfen haben, jedoch gibt es wirklich keine Möglichkeit bmp bzw. tiff zu verarbeiten? Muss es doch eigentlich, denn die Seite imageshack.us schafft es doch auch.

        1. Hallo Finalplayer_Ryu,

          Ähhh, ja, also danke an alle die mir bisher geholfen haben, jedoch gibt es wirklich keine Möglichkeit bmp bzw. tiff zu verarbeiten? Muss es doch eigentlich, denn die Seite imageshack.us schafft es doch auch.

          Du kannst auch ImageMagick benutzen. Dass sollte bessere Ergebnisse liefern und auch viel mehr Formate können. Muss dein Webserver nur unterstützen...

          Jonathan

          1. Hallo Finalplayer_Ryu,

            Ähhh, ja, also danke an alle die mir bisher geholfen haben, jedoch gibt es wirklich keine Möglichkeit bmp bzw. tiff zu verarbeiten? Muss es doch eigentlich, denn die Seite imageshack.us schafft es doch auch.

            Du kannst auch ImageMagick benutzen. Dass sollte bessere Ergebnisse liefern und auch viel mehr Formate können. Muss dein Webserver nur unterstützen...

            Jonathan

            Wie kann ich nachschauen ob mein Webserver ImageMagick unterstützt?, denn ich habs mit phpinfo() versucht, aber ich konnte keinen Eintrag über ImageMagick finden, von GD2 aber schon.

            Zur Zeit sieht mein Script nun so aus:
            $details=getimagesize($_FILES["tbild"]["tmp_name"]);
            $max1=300;
            $max2=225;
            $faktor=$details[0]/$detail[1];
            if($faktor<1)  //Höhe > Breite
            {
             $thhoehe=$max1;
             $thbreite=$faktor*$max1;
            }
            elseif($faktor>=1) //Höhe < Breite ODER Höhe = Breite
            {
             $thhoehe=$faktor*$max2;
             $thbreite=$max2;
            }
            $thumbnail=imagecreatetruecolor($thbreite, $thhoehe);
            switch($details[2])
            {
            case 1: //gif
             $original=imagecreatefromgif($_FILES["tbild"]["tmp_name"]);
             break;
            case 2: //jpeg
             $original=imagecreatefromjpeg($_FILES["tbild"]["tmp_name"]);
             break;
            case 3: //png
             $original=imagecreatefrompng($_FILES["tbild"]["tmp_name"]);
             break;
            }
            imagecopyresampled($thumbnail, $original, 0, 0, 0, 0, $thbreite, $thhoehe, $details[0], $details[1]);
            $thumbnailname=time().".png";
            imagepng($thumbnail, "../imageupload/".$thumbnailname);
            imagedestroy($thumbnail);
            imagedestroy($original);

            Jedoch funktioniert es bisher noch nicht, kann aber keinen Fehler finden, bei imagepng hab ich es auch mal mit imagepng($thumbnail) versucht auszugeben, jedoch auch mit keinem Erfolg.

            1. $faktor=$details[0]/$detail[1];

              ok, fehler gefunden, ach bin ich blöd, dass hasse ich wenn so blöde schreibfehler auftreten, es müsste natürlich
              $faktor=$details[0]/$details[1];
              stehen, hab das "s" vergessen.

  2. Hallo,

    Es sollen eigentlich alle bekannten Bildformate upgeloadet werden, also gif, jpg, png

    ok

    bmp

    warum zum Geier bmp?

    Also ein kleiner Hinweis, welche Funktion man da verwendet, würde schon reichen

    imagecreatetruecolor()
    imagecreatefrompng() | imagecreatefromjpeg() | imagecreatefromgif()
    imagecopyresampled()
    imagepng() | imagejpeg() | imagegif()

    Diese 4 Zeilen, in dieser Reihenfolge langen für eine Thumbnailerstellung.
    Was noch hinzukommt sind ein paar Berechnungen zur Größe um beim Thumbnail das richtige Seitenverhältnis zu erhalten. Sowie natürlich noch eine Prüfung, ob es sich bei $_FILES["bild"] auch wirklich um ein Bild handelt.

    muss ich selbst zwischen den verschieden Bildformaten unterscheiden

    ja, das musst du. Siehe oben.

    Grüße,

    Jochen

    --
    Kritzeln statt texten:
    Scribbleboard
  3. echo $begrüßung;

    Es sollen eigentlich alle bekannten Bildformate upgeloadet werden, also gif, jpg, bmp, png.

    Mit dem Windows-Bitmap-Format bekommst du ein Problem. Nicht nur, dass dieses ein nicht komprimierendes Format ist, und du damit sehr große Bilddateien bekommst, wird dieses Format auch nicht von den Image Functions unterstützt (WBMP ist Wireless Bitmap, nicht Windows Bitmap)

    muss ich selbst zwischen den verschieden Bildformaten unterscheiden und entsprechend weiter vorgehen oder geht das automatisch?

    Die Unterscheidung musst du mittels if oder switch und dem Aufruf der passenden Image Functions selbst treffen. Beim Ermitteln des Bildformates hilft dir getimagesize(). Diese Funktion ermittelt das Grafikformat anhand der Bilddaten und ignoriert die Dateiendung, lässt sich also nicht durch einen falschen Dateinamen irreführen.

    echo "$verabschiedung $name";