Thumbnail: Bilder verkleinern

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Thumbnail: Bilder verkleinern

    Also, ich glaube es gab schon mal einen Tread zu diesem Thema, bin aber trotz Forensuche nicht weiter gekommen.

    Ich möchte, dass mein Bild nur Hochgeladen wird, wenn es genau 700x525 gross ist.

    Hier mein aktuelles Skript:

    Quellcode

    1. // Bildupload
    2. if ($_FILES['datei']['error'])
    3. {
    4. $error .= "<li>Allgemeiner Fehler</li>";
    5. }
    6. if ($_FILES['datei']['size'] > 10240000)
    7. {
    8. $error .= "<li>Datei zu größ</li>";
    9. }
    10. if ($_FILES['datei']['type'] != 'image/jpeg')
    11. {
    12. $error .= "<li>Faslches Dateiformat</li>";
    13. }
    14. if(isset($error))
    15. {
    16. echo $error;
    17. } else {
    18. //Bezuege für Bildupload
    19. $id=time();
    20. $filename = $id.$_FILES['datei']['name'];
    21. $dir='./daten';
    22. move_uploaded_file($_FILES['datei']['tmp_name'], $dir."/".$filename);
    23. }
    24. // Kopie erstellen
    25. $dir2='./datenvor';
    26. copy ($dir."/".$filename,$dir2."/".$filename);
    27. // Kopie verkleinern
    Alles anzeigen


    Nun wird ja eine Kopie des Bildes in den Ordner ./datenvor abeglegt. Ich möchte nun, dass dieses Bild auf etwa 150x100 verkelinert wird.

    Wie lässt sich das realisieren?
  • du kannst die bildgröße erst ermitteln, wenn die datei auf dem server ist
    also ganz normal uploaden

    Quellcode

    1. $size = getimagesize($_FILES['datei']['tmp_name']);
    2. if($size[0] == 700 && $size[1] == 525) {
    3. //fortfahren
    4. }


    hier ein code zur thumbnail generierung
    [coderwiki]HowTos/PHP-Thumbnails[/coderwiki]

    die zeile 31 musst folgendermaßen ändern:

    Quellcode

    1. imagejpeg($thumb, "./datenvor".$filename);
  • Viele Dank für deine Hilfe. Ich kann alos keine Dateien abweisen, wenn die Bildgrösse nicht stimmt wie etwa bei der Dateigrösse? Wie wird das den z.B in den diversen Foren bei den Avataren gemacht?

    Beim Script das du mir gegeben hast steht, dass die Vorschaubilder nihct abgespeichert werden, sonder immer wieder frisch erzeugt werden. Ich benötige aber ein Script, welches die Bilder abspeichert.
  • Abend,

    in den Foren läuft das meistens so:
    Das Bild wird hochgeladen (wie immer in den temporären Ordner auf dem [coderwiki]Informationen/Server[/coderwiki]), dann überprüft ein Script Dateigröße, Format, Maße usw. und speichert es entweder "für immer" gespeichert, also aus dem Temp-ordner in den angegebenen Ordner oder es wird gelöscht, falls es der Überprüfung nicht stand hält.

    Genauso kannst du mit d0nUts Tipps auch zu deinem Ziel kommen.

    Hoffe das hilft dir bissl ;)

    cya
  • "muwi" schrieb:

    Beim Script das du mir gegeben hast steht, dass die Vorschaubilder nihct abgespeichert werden, sonder immer wieder frisch erzeugt werden.


    doch, das tut genau meine änderung:
    [phpdoc]imagejpeg[/phpdoc]
    int imagejpeg ( resource im [, string filename [, int quality]] );

    Mit Angabe des Dateinamens wird das Bild gespeichert
    die header() Funktion musst du noch aus dem Wiki Code entfernen
  • Ich habe da mal probiert und dachte, dass es so gehen müsste. Leider ohne Erfolg.

    Quellcode

    1. // Bildupload
    2. if ($_FILES['datei']['error'])
    3. {
    4. $error .= "<li>Allgemeiner Fehler</li>";
    5. }
    6. if ($_FILES['datei']['size'] > 10240000)
    7. {
    8. $error .= "<li>Datei zu größ</li>";
    9. }
    10. if ($_FILES['datei']['type'] != 'image/jpeg')
    11. {
    12. $error .= "<li>Faslches Dateiformat</li>";
    13. }
    14. $size = getimagesize($_FILES['datei']['tmp_name']);
    15. if($size[0] != 700 && $size[1] != 525) {
    16. $error .= "<li>Falsche Bildgrösse</li>";
    17. }
    18. if(isset($error))
    19. {
    20. echo $error;
    21. } else {
    22. //Bezuege für Bildupload
    23. $id=time();
    24. $filename = $id.$_FILES['datei']['name'];
    25. $dir='./daten';
    26. move_uploaded_file($_FILES['datei']['tmp_name'], $dir."/".$filename);
    27. }
    28. /*
    29. // Kopie erstellen
    30. $dir2='./datenvor';
    31. copy ($dir."/".$filename,$dir2."/".$filename);
    32. */
    33. //verkleinern und kopieren
    34. $src = './daten/'.$filename;
    35. $quellbild = imagecreatefromjpeg($src);
    36. if(!@$thumb = imagecreatetruecolor(120,90)) $thumb = imagecreate(700,525);
    37. imagecopyresized($thumb, $quellbild, 0, 0, 0, 0, 120, 90, 700, 525);
    38. imagejpeg($thumb, "./datenvor".$filename);
    Alles anzeigen


    Das Problem tritt erst ab der 9. Zeile vor Schluss auf. Der Rest geht einwandfrei.
  • ich würde den else block mal vergrößern
    denn wenn du im elseblock keinen dateinamen definierst, wird natürlich auch $src keinen sinnvollen pfad ergeben

    wenns nicht klappt, poste nochmal die genaue fehlermeldung

    Quellcode

    1. else {
    2. //Bezuege für Bildupload
    3. $id=time();
    4. $filename = $id.$_FILES['datei']['name'];
    5. $dir='./daten';
    6. move_uploaded_file($_FILES['datei']['tmp_name'], $dir."/".$filename);
    7. /*
    8. // Kopie erstellen
    9. $dir2='./datenvor';
    10. copy ($dir."/".$filename,$dir2."/".$filename);
    11. */
    12. //verkleinern und kopieren
    13. $src = './daten/'.$filename;
    14. $quellbild = imagecreatefromjpeg($src);
    15. if(!@$thumb = imagecreatetruecolor(120,90)) $thumb = imagecreate(700,525);
    16. imagecopyresized($thumb, $quellbild, 0, 0, 0, 0, 120, 90, 700, 525);
    17. imagejpeg($thumb, "./datenvor".$filename);
    18. }
    Alles anzeigen


    UPDATE: Hier findest du unser Tutorial zum Thumbnail generieren: [wiki]Thumbnails in PHP erstellen[/wiki]
  • Hey, das Script verkleinert tatsächlich das Bild. Nur ein kleiner Fehler hat es noch:

    Anstatt das das Bild in den Unterordner ./datenvor mit dem Dateinamen aus $filename gespeichert wird, also etwa ./datenvor/bild125.jpg, wird das Bild im gleichen Verzeichnis wie das Script gespeichert und heissst plötzlich datenvorbild.jpg. Wieso das?
  • Klar, bei resize wird das Bild stupide kleingeschrumpelt, beim resampeln findet eine Interpolation statt. Kostet deinen Server mehr Arbeit, verbessert das Ergebnis aber enorm.
    ~ mfg SeBa

    Ich beantworte keine PMs zu Computer-/Programmierproblemen. Bitte wendet euch an das entsprechende Forum.

    [Blockierte Grafik: http://i.creativecommons.org/l/by-sa/3.0/80x15.png]