Thumb aus URL erstellen

zamo76

Erfahrenes Mitglied
Hi Leute,

zu fortgeschrittener Stunde noch Frage.

Habe mir schon einige Thumb-Scripts angesehen, aber leider finde ich kein script welches eine Grafik aus ner externen URL erstellt. Ich möchte die Thumbs auch nicht speichern, sondern direkt ausgeben.

Danke im Voraus

zamo76
 
Zuerst muss ich sagen das der Code nicht von mir ist ihc hba ihn selbst entdeckt:

thumbnail.php
PHP:
<?php
    # Nachfolgende Funktion ist für die Ausgabe eventueller Fehler als Bild zuständig
    function error_message($text = ''){
        $img = imagecreatetruecolor(strlen($text) * 7, 20); // Erstellt ein neues Bild
        imagefill($img, 0, 0, imagecolorallocate($img, 255, 255, 255)); // Malt das bild weiß aus
        imagestring($img, 2, 0, 0, $text, imagecolorallocate($img, 0, 0, 0)); // Schreibt den Text der der Funktion übergeben wurde auf das Bild
        imagepng($img); // Gibt das Bild aus
        imagedestroy($img); // Löscht das Bild aus dem Arbeitsspeicher des Servers
    }
    $img_src = $_GET['src']; // Pfad zum Bild aus welchem das Thumbnail erstellt werden soll
    $cache_dir = 'thumbs'; // Pfad zum Cache Verzeichnis wo später die Bilder gespeichert werden
    $cache = false; // Gibt an ob die Bilder aus dem Cache geladen werden sollen
    # Überprüft ob ein Bildpfad übergeben wurde
    if (!isset($_GET['src'])){
        error_message('Es wurde kein Bildpfad übergeben aus dem ein Thumbnail ezeugt werden könnte'); // Gibt eine Fehlermeldung aus
    }
    # Auslesen der Bildgröße und des Bildtyps
    $image_infos = @getimagesize($img_src) or error_message('Auf das Bild kann nicht zugegriffen werden');
    $width = $image_infos[0];
    $height = $image_infos[1];
    $type = $image_infos[2];
    $mime = $image_infos['mime'];
    # Berechnung der Maße des Thumbnails
    if (isset($_GET['w']) && !isset($_GET['h'])){ // Überprüfen ob die Breite oder die Höhe berechnent werden soll
        $new_width = intval($_GET['w']); // Zuweisen der neuen Breite
        $new_height = ceil($height * $new_width / $width); // Berechnen der neuen Höhe
    } else if (isset($_GET['h']) && !isset($_GET['w'])){ // Überprüfen ob die Breite oder die Höhe berechnent werden soll
        $new_height = intval($_GET['h']); // Zuweisen der neuen Höhe
        $new_width = ceil($width * $new_height / $height); // Berechnen der neuen Breite
    } else if (isset($_GET['h']) && isset($_GET['w'])){
        $new_height = intval($_GET['h']); // Zuweisen der neuen Höhe
        $new_width = intval($_GET['w']); // Zuweisen der neuen Breite
    } else {
        error_message('Es muss entweder die neu Höhe oder die neu Breite angegeben werden.'); // Fehlermeldung ausgeben
    }
    # Prüft ob das Chache Verzeichnis existiert bzw. benötigt wird und legt dieses eventuell an
    if ($cache === true && !file_exists($cache_dir)){
        mkdir($cache_dir) or error_message('Das Cache Verzeichnis konnte nicht angelegt werden'); // Legt das Cache Verzeichnis an. Sollte dies nicht möglich sein, so wird ein Fehler ausgegeben
        chmod($cache_dir, 0777); // Gibt dem Cache Verzeichniss die nötigen Schreib- und Lese Rechte
    }
    # Ermitteln des Bildtypes und Erstellung des Thumbnails
    switch ($type){
        case 1:
            header('Content-type: '.$mime); // Header ausgeben
            if (imagetypes() & IMG_GIF){ // Überprüfen ob das Bildformat untestützt wird
                if (!file_exists($cache_dir.'/'.md5($img_src).'.gif')){ // Wenn das Thumbnail nicht existiert wird es erstellt
                    $orginal = imagecreatefromgif($img_src) or error_message('Das Bild wurde nicht gefunden'); // Bild aus dem Orginalbild erstellen
                    $thumb = imagecreatetruecolor($new_width, $new_height); // Das Thumbnailbild erstellen
                    imagecopyresampled($thumb, $orginal, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
                    if ($cache === true){ // Prüft ob das Bild gespeichert werden soll
                        imagegif($thumb, $cache_dir.'/'.$img_src) or error_message('Das Bild konnte nicht gespeichert werden'); // Bild speichern
                    }
                    imagegif($thumb); // Bild ausgeben
                } else {
                    readfile($cache_dir.'/'.$img_src) or error_message('Das Bild wurde nicht gefunden'); // Bild ausgeben
                }
            } else {
                error_message('GIF Bilder werden nicht unterstützt'); // Fehlermeldung ausgeben, wenn das Bildformat nicht unterstützt wird
            }
            break;
        case 2:
            header('Content-type: '.$mime); // Header ausgeben
            if (imagetypes() & IMG_JPG){ // Überprüfen ob das Bildformat untestützt wird
                if (!file_exists($cache_dir.'/'.md5($img_src).'.jpg')){ // Wenn das Thumbnail nicht existiert wird es erstellt
                    $orginal = imagecreatefromjpeg($img_src) or error_message('Das Bild wurde nicht gefunden'); // Bild aus dem Orginabild erstellen
                    $thumb = imagecreatetruecolor($new_width, $new_height); // Das Thumbnailbild erstellen
                    imagecopyresampled($thumb, $orginal, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
                    if ($cache === true){ // Prüft ob das Bild gespeichert werden soll
                        imagejpeg($thumb, $cache_dir.'/'.$img_src) or error_message('Das Bild konnte nicht gespeichert werden'); // Bild speichern
                    }
                    imagejpeg($thumb); // Bild ausgeben
                } else {
                    readfile($cache_dir.'/'.$img_src) or error_message('Das Bild wurde nicht gefunden'); // Bild ausgeben
                }
            } else {
                error_message('JPEG Bilder werden nicht unterstützt'); // Fehlermeldung ausgeben, wenn das Bildformat nicht unterstützt wird
            }
            break;
        case 3:
            header('Content-type: '.$mime); // Header ausgeben
            if (imagetypes() & IMG_PNG){ // Überprüfen ob das Bildformat untestützt wird
                if (!file_exists($cache_dir.'/'.md5($img_src).'.png')){ // Wenn das Thumbnail nicht existiert wird es erstellt
                    $orginal = imageCreateFromPNG($img_src) or error_message('Das Bild wurde nicht gefunden'); // Bild aus dem Orginalbild erstellen
                    $thumb = imagecreatetruecolor($new_width, $new_height); // Das Thumbnailbild erstellen
                    imagecopyresampled($thumb, $orginal, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
                    if ($cache === true){ // Prüft ob das Bild gespeichert werden soll
                        imagepng($thumb, $cache_dir.'/'.$img_src) or error_message('Das Bild konnte nicht gespeichert werden'); // Bild speichern

                    }
                    imagepng($thumb); // Bild ausgeben
                } else {
                    readfile($cache_dir.'/'.$img_src) or error_message('Das Bild konnte nicht gespeichert werden'); // Bild ausgeben
                }
            } else {
                error_message('PNG Bilder werden nicht unterstützt'); // Fehlermeldung ausgeben, wenn das Bildformat nicht unterstützt wird
            }
            break;
        default:
            error_message('Das Bildformat wird nicht unterstützt'); // Fehlermeldung ausgeben, wenn das Bildformat nicht unterstützt wird
    }
    # Löscht das Bild aus dem Speicher des Servers falls es existiert
    if (isset($thumb)){
        imagedestroy($thumb);
    }
	
?>

die datei einfach hochladen wenn du nun ein Thumbnail haben möchtest einfach als src im img tag folgendes angeben:

HTML:
thumbnail.php?src=URLDEINESBILDES&w=BREITE
oder
HTML:
thumbnail.php?src=URLDEINESBILDES&h=HÖHE


Hier ein kleines beispiel:
http://katana.wutachsound.de/upload...orials.de/forum/images/misc/tuts_uc.gif&w=150 Das ist das logo des Tutorials Forum
 
Zuletzt bearbeitet:
Neori hat gesagt.:
Zuerst muss ich sagen das der Code nicht von mir ist ihc hba ihn selbst entdeckt:
Hallo,
der Code stammt von hier. Es sollte auch die dort gepostete Version verwendet werden,
da der Code von Neori noch ein paar kleine Fehler beinhaltet.
Code:
readfile($cache_dir.'/'.md5($img_src)) or error_message('Das Bild konnte nicht gespeichert werden'); // Bild ausgeben

mfg
forsterm
 
Zuletzt bearbeitet:
forsterm hat gesagt.:
Hallo,
der Code stammt von hier. Es sollte auch die dort gepostete Version verwendet werden,
da der Code von Neori noch ein paar kleine Fehler beinhaltet.
Code:
readfile($cache_dir.'/'.md5($img_src).'.png') or error_message('Das Bild konnte nicht gespeichert werden'); // Bild ausgeben

mfg
forsterm

Ist mir bewusst hab ihn modifiziert da bei mir das md5() zu problemen führte
 
Neori hat gesagt.:
Ist mir bewusst hab ihn modifiziert da bei mir das md5() zu problemen führte
Hallo,
das Problem, welches du dadurch erhalten wirst ist halt, dass wenn zwei Bilder zufälligerweise den gleichen Namen haben, wird nur das zuletzt aufgerufene im "Cache" gespeichert.

mfg
forsterm

Ps: Wie haben sich denn die Probleme bei dir geäußert?
 
Zuletzt bearbeitet:
das problem war das kein Bild (!) angezeigt wurde egal was ich tat habs aufgerufen wie oben in meinem beispiel oder mit absoluter url zugegeben das mit dem gleichen namen is doof
bei mir is der chache auf false gesetzt

wenn er true ist gehen bei mir keine externen bilder :(

mfg Neori
 
Hi Leute,

das funktioniert ja perfekt Bis auf die Tatsache, das er keine GIF's will...?

Wisst ihr wie man das ändern kann?

Danke erstmal für das Script!

zamo76
 
Hier mal mein Script. Vielleicht habe ich ja nen Fehler drin der mir nicht auffällt:

PHP:
<?php
    # Nachfolgende Funktion ist für die Ausgabe eventueller Fehler als Bild zuständig
    function error_message($text = ''){
        $img = imagecreatetruecolor(strlen($text) * 7, 20); // Erstellt ein neues Bild
        imagefill($img, 0, 0, imagecolorallocate($img, 255, 255, 255)); // Malt das bild weiß aus
        imagestring($img, 2, 0, 0, $text, imagecolorallocate($img, 0, 0, 0)); // Schreibt den Text der der Funktion übergeben wurde auf das Bild
        imagepng($img); // Gibt das Bild aus
        imagedestroy($img); // Löscht das Bild aus dem Arbeitsspeicher des Servers
    }
    $img_src = $_GET['src']; // Pfad zum Bild aus welchem das Thumbnail erstellt werden soll
    $cache_dir = 'thumb'; // Pfad zum Cache Verzeichnis wo später die Bilder gespeichert werden
    $cache = false; // Gibt an ob die Bilder aus dem Cache geladen werden sollen
    # Überprüft ob ein Bildpfad übergeben wurde
    if (!isset($_GET['src'])){
        error_message('Sorry!'); // Gibt eine Fehlermeldung aus
    }
    # Auslesen der Bildgröße und des Bildtyps
    $image_infos = @getimagesize($img_src) or error_message('Sorry!');
    $width = $image_infos[0];
    $height = $image_infos[1];
    $type = $image_infos[2];
    $mime = $image_infos['mime'];
    # Berechnung der Maße des Thumbnails
    if (isset($_GET['w']) && !isset($_GET['h'])){ // Überprüfen ob die Breite oder die Höhe berechnent werden soll
        $new_width = intval($_GET['w']); // Zuweisen der neuen Breite
        $new_height = ceil($height * $new_width / $width); // Berechnen der neuen Höhe
    } else if (isset($_GET['h']) && !isset($_GET['w'])){ // Überprüfen ob die Breite oder die Höhe berechnent werden soll
        $new_height = intval($_GET['h']); // Zuweisen der neuen Höhe
        $new_width = ceil($width * $new_height / $height); // Berechnen der neuen Breite
    } else if (isset($_GET['h']) && isset($_GET['w'])){
        $new_height = intval($_GET['h']); // Zuweisen der neuen Höhe
        $new_width = intval($_GET['w']); // Zuweisen der neuen Breite
    } else {
        error_message('Sorry!'); // Fehlermeldung ausgeben
    }
    # Prüft ob das Chache Verzeichnis existiert bzw. benötigt wird und legt dieses eventuell an
    if ($cache === true && !file_exists($cache_dir)){
        mkdir($cache_dir) or error_message('Sorry'); // Legt das Cache Verzeichnis an. Sollte dies nicht möglich sein, so wird ein Fehler ausgegeben
        chmod($cache_dir, 0777); // Gibt dem Cache Verzeichniss die nötigen Schreib- und Lese Rechte
    }
    # Ermitteln des Bildtypes und Erstellung des Thumbnails
    switch ($type){
        case 1:
            header('Content-type: '.$mime); // Header ausgeben
            if (imagetypes() & IMG_GIF){ // Überprüfen ob das Bildformat untestützt wird
                if (!file_exists($cache_dir.'/'.md5($img_src).'.gif')){ // Wenn das Thumbnail nicht existiert wird es erstellt
                    $orginal = imagecreatefromgif($img_src) or error_message('Sorry!'); // Bild aus dem Orginalbild erstellen
                    $thumb = imagecreatetruecolor($new_width, $new_height); // Das Thumbnailbild erstellen
                    imagecopyresampled($thumb, $orginal, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
                    if ($cache === true){ // Prüft ob das Bild gespeichert werden soll
                        imagegif($thumb, $cache_dir.'/'.$img_src) or error_message('Sorry'); // Bild speichern
                    }
                    imagegif($thumb); // Bild ausgeben
                } else {
                    readfile($cache_dir.'/'.$img_src) or error_message('Das Bild wurde nicht gefunden'); // Bild ausgeben
                }
            } else {
                error_message('Sorry!'); // Fehlermeldung ausgeben, wenn das Bildformat nicht unterstützt wird
            }
            break;
        case 2:
            header('Content-type: '.$mime); // Header ausgeben
            if (imagetypes() & IMG_JPG){ // Überprüfen ob das Bildformat untestützt wird
                if (!file_exists($cache_dir.'/'.md5($img_src).'.jpg')){ // Wenn das Thumbnail nicht existiert wird es erstellt
                    $orginal = imagecreatefromjpeg($img_src) or error_message('Sorry!'); // Bild aus dem Orginabild erstellen
                    $thumb = imagecreatetruecolor($new_width, $new_height); // Das Thumbnailbild erstellen
                    imagecopyresampled($thumb, $orginal, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
                    if ($cache === true){ // Prüft ob das Bild gespeichert werden soll
                        imagejpeg($thumb, $cache_dir.'/'.$img_src) or error_message('Sorry!'); // Bild speichern
                    }
                    imagejpeg($thumb); // Bild ausgeben
                } else {
                    readfile($cache_dir.'/'.$img_src) or error_message('Sorry!'); // Bild ausgeben
                }
            } else {
                error_message('Sorry!'); // Fehlermeldung ausgeben, wenn das Bildformat nicht unterstützt wird
            }
            break;
        case 3:
            header('Content-type: '.$mime); // Header ausgeben
            if (imagetypes() & IMG_PNG){ // Überprüfen ob das Bildformat untestützt wird
                if (!file_exists($cache_dir.'/'.md5($img_src).'.png')){ // Wenn das Thumbnail nicht existiert wird es erstellt
                    $orginal = imageCreateFromPNG($img_src) or error_message('Das Bild wurde nicht gefunden'); // Bild aus dem Orginalbild erstellen
                    $thumb = imagecreatetruecolor($new_width, $new_height); // Das Thumbnailbild erstellen
                    imagecopyresampled($thumb, $orginal, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
                    if ($cache === true){ // Prüft ob das Bild gespeichert werden soll
                        imagepng($thumb, $cache_dir.'/'.$img_src) or error_message('Das Bild konnte nicht gespeichert werden'); // Bild speichern

                    }
                    imagepng($thumb); // Bild ausgeben
                } else {
                    readfile($cache_dir.'/'.$img_src) or error_message('Sorry!'); // Bild ausgeben
                }
            } else {
                error_message('Sorry!'); // Fehlermeldung ausgeben, wenn das Bildformat nicht unterstützt wird
            }
            break;
        default:
            error_message('Sorry!'); // Fehlermeldung ausgeben, wenn das Bildformat nicht unterstützt wird
    }
    # Löscht das Bild aus dem Speicher des Servers falls es existiert
    if (isset($thumb)){
        imagedestroy($thumb);
    }
    
?>
 

Neue Beiträge

Zurück