Facebook Button Twitter Button YouTube Button RSS Button

IT-Runde

PHP Funktion: Vorschaubilder/Thumbnails erzeugen

  • PHP Funktion: Vorschaubilder/Thumbnails erzeugen

    Heute gibt es mal wieder etwas nützliches für die Programmierer unter euch! 🙂 Lässt man Besucher oder Nutzer mit dem eigenen Script Bilder hochladen wird es die verschiedensten Ergebnisse geben: Einige laden vielleicht nur ein Icon hoch, andere haben das Bild schon verkleinert und die letzten versuchen einfach das Originalbild von der Kamera mit einer Größe von 5MB und höher hochzuladen.

    Will man die Bilder dann z.B. als Avatar oder ähnliches ausgeben, müssen die großen Fotos als Beispiel in ihrer vollen Größe geladen werden um sie dann klein ausgeben zu lassen. Das die Ladezeiten sich dadurch drastisch erhöhen ist wohl jedem klar :D.

    Abhilfe schaffen dabei Thumbnails oder auch Vorschaubilder, die man beim hochladen des Bildes sofort erzeugen lassen sollte. Da man dieses Problem öfter hat, habe ich mir eine Funktion zusammen gebastelt! :cool:!

    Übergeben werden muss dieser nur das Originalbild ($image) (also das soeben hochgeladene), dann der Pfad wo das neue Bild gespeichert werden soll ($target) und zum Schluss die maximale Breite ($max_width) und Höhe ($max_height).

    Die Funktion:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    
    // FUNKTION: Bilder auf passende Höhe und Breite verkleinern (Nur .jpg, .png und .gif)
    function vorschaubild_erzeugen($image, $target, $max_width, $max_height) {
    	// Funktion von IT-Runde.de
    	$picsize     = getimagesize($image);
    	if(($picsize[2]==1)OR($picsize[2]==2)OR($picsize[2]==3)) {
    	if($picsize[2] == 1) {
    	  $src_img     = imagecreatefromgif($image);
    	}
    	if($picsize[2] == 2) {
    	  $quality=100;
    	  $src_img     = imagecreatefromjpeg($image);
    	}
    	if($picsize[2] == 3) {
    	  $quality=9;
    	  $src_img     = imagecreatefrompng($image);
    	}
    	$src_width   = $picsize[0];
    	$src_height  = $picsize[1];
    	$skal_vert = $max_height/$src_height;
    	$skal_hor = $max_width/$src_width;
    	$skal = min($skal_vert, $skal_hor);
    	if ($skal > 1) {
    	 $skal = 1;
    	}
    	$dest_height = $src_height*$skal;
    	$dest_width = $src_width*$skal;
    	$dst_img = imagecreatetruecolor($dest_width,$dest_height);
    	imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $dest_width, $dest_height, $src_width, $src_height);
    	if($picsize[2] == 1) {
    	  imagegif($dst_img, "$target");
    	}
    	if($picsize[2] == 2) {
    	  imagejpeg($dst_img, "$target", $quality);
    	}
    	if($picsize[2] == 3) {
    	  imagepng($dst_img, "$target", $quality);
    	}
    	}
    }

    Erst wird geschaut, welcher Dateityp verkleinert werden soll (deshalb sind auch nur gif, jpg und png-Bilder erlaubt). Danach wird ein neues Bild erzeugt aus dem originalen. Jetzt wird noch geschaut ob das Bild höher oder breiter ist und je nachdem werden die Seiten klein skaliert. Zum Schluss wird dann das errechnete Bild je nach Dateityp auf dem selbst definierten Pfad erzeugt.

    Welche Vorteile hat meine Funktion?

    • Maximale Breite/Höhe definieren (Das Bild ist nie Größer als man Platz definiert hat)
    • Keine Verzerrung von kleinen Bildern
    • Ausgabepfad kann selbst definiert werden
    • Unterstützt jpg, gif und png Bilder

    Ich benutze diese Funktion in einigen meiner Scripte und bisher wurden (Wenn man vorher alle nicht unterstützten Dateitypen abfängt) noch alle Bilder passend in Thumbnails umgewandelt. Ein Codebeispiel zur Übergabe wäre folgendes:



    Wie verkleinert ihr bisher eure Bilder in Thumbnails? Habt ihr vielleicht sogar eine schlankere Funktion? Uns interessiert eure Meinung!

  • Kostenlose IT-Tipps

    • Nebenbei ein Online Business aufbauen
    • Passiv Geld generieren
    • Online Trends (Nischenseiten, SEO, Google & Co.)

     
     


  1. #1 Christian
    19.08.2014 um 23:26 Uhr

    Hallo Michael,

    so rufst du die Funktion auf:

    1
    
    vorschaubild_erzeugen($image, $target, $max_width, $max_height);

    Übergeben werden muss der Pfad des originalen Bildes ($image), der Pfad des verkleinerten Bildes ($target), die maximale Breite ($max_width) und die maximale Höhe ($max_height).

    Ich hoffe damit kannst du arbeiten 🙂

    Viele Grüße,
    Christian

    Post ReplyPost Reply
  2. #2 Michael
    20.08.2014 um 05:30 Uhr

    Hallo Christian,

    Danke für die Antwort!

    über function habe ich dieses gesetzt:

    1
    2
    3
    4
    5
    6
    7
    
    $image = "/var/www/ud16_253/html/thai-tiger/bilder/$rename_bild2";
     
    $target = "/var/www/ud16_253/html/thai-tiger/bilder/thumbnail/";
     
    $max_with = 100;
     
    $max_height = 100;

    Und ganz unten dann

    1
    
    vorschaubild_erzeugen($image, $target, $max_width, $max_height);

    Es kommt dann folgende Fehlermeldung:

    Warning: imagecreatetruecolor(): Invalid image dimensions in /var/www/ud16_253/html/thai-tiger/gb.php on line 139

    Warning: imagecopyresampled() expects parameter 1 to be resource, boolean given in /var/www/ud16_253/html/thai-tiger/gb.php on line 140

    Warning: imagejpeg() expects parameter 1 to be resource, boolean given in /var/www/ud16_253/html/thai-tiger/gb.php on line 145

    Was habe ich da falsch gemacht?

    LG, Micha

    Post ReplyPost Reply
  3. #3 Christian
    20.08.2014 um 08:16 Uhr

    Einmal darf in der Variable $target kein Ordner-Pfad eingebene sein, sondern der Pfad zum schlussendlichen Bild. Als zweites würde ich den Pfad bei $image und $target vom absoluten Pfad in einen relativen Pfad ändern.

    In deinem Beispiel also so:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    $image = "./bilder/$rename_bild2";
     
    $target = "./bilder/thumbnail/$rename_bild2";
     
    $max_with = 100;
     
    $max_height = 100;
     
    vorschaubild_erzeugen($image, $target, $max_width, $max_height);

    Zusätzlich darf $rename_bild2 natürlich nicht „bildname_eins“ heißen, sondern muss auch die Endung beinhalten, also „bildname_eins.png“, „bildname_eins.gif“ oder „bildname_eins.jpg“.

    Viel Glück beim umsetzen! 🙂

    Lieben Grüß,
    Christian

    Post ReplyPost Reply
  4. #4 Michael
    20.08.2014 um 15:54 Uhr

    Ich habe das jetzt so geändert wie Du das geschrieben hast. Immernoch die gleiche Fehlermeldung.

    $rename_bild2 hat die Endung jpg

    $rename_bild2 = dateiname die gerade uploaded wurde

    Hast Du ein Messenger wo uns unterhalten können?

    Post ReplyPost Reply
  5. #5 Michael
    20.08.2014 um 15:57 Uhr

    Übrigens, habe ich ein anderes Script gefunden welches ohne function funst.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    $PicPathIn = "/var/www/ud16_253/html/thai-tiger/bilder/";
    $PicPathOut = "/var/www/ud16_253/html/thai-tiger/bilder/thumbnail/";
    $bild = $rename_bild2;
     
    // Bilddaten ermitteln
    $size=getimagesize("$PicPathIn"."$bild");
    $breite=$size[0];
    $hoehe=$size[1];
    $neueBreite=150;
    $neueHoehe=intval($hoehe*$neueBreite/$breite);
     
    if($size[2]==1) {
    // GIF
    $altesBild=imageCreateFromGIF("$PicPathIn"."$bild");
    $neuesBild=imageCreateTrueColor($neueBreite,$neueHoehe);
    imageCopyResized($neuesBild,$altesBild,0,0,0,0,$neueBreite,$neueHoehe,$breite,$hoehe);
    imageGIF($neuesBild,"$PicPathOut"."TN"."$bild");     
    }
     
    if($size[2]==2) {
    // JPG
    $altesBild=imageCreateFromJPEG("$PicPathIn"."$bild");
    $neuesBild=imageCreateTrueColor($neueBreite,$neueHoehe);
    imageCopyResized($neuesBild,$altesBild,0,0,0,0,$neueBreite,$neueHoehe,$breite,$hoehe);
    ImageJPEG($neuesBild,"$PicPathOut"."TN"."$bild");    // aus "bild1.jpg" wird "TNbild1.jpg"
    }
    Post ReplyPost Reply
Kommentar schreiben