[PHP] Thumbs dynamisch generieren

Toby

Cadet 4th Year
Dabei seit
Mai 2003
Beiträge
107
Hallo zusammen,

ich würde gerne für meine Ebayauktionen dynamische Thumbs generieren.
Soll heissen, die großen Fotos uploaden und die Vorschaubilder mit kurzer Ladezeit werden automatisch generiert. Mit PHP sollte dies möglich sein. Ich hab diese Möglichkeit auch schon bei anderen Ebay-Mitgliedern gesehen siehe z.B. hier:

Beispiel Ebay-Auktion mit kleinen Vorschaufotos

Der <img src> Code lautet bei diesen Fotos dann nur wie folgt:
url/abbildungen/resizer.php?imgfile=foto.jpg

Ich finde die Sache echt gut und habe mich deswegen in Google auf die Suche gemacht.
Fündig wurde ich auf der Website von drweb.de

Folgenden Code habe ich dann in einer PHP-Datei namens 'resizer.php' hochgeladen:

PHP:
<?php

/* <img src="resizer.php?bildnr=1.jpg"> */

$bild = imagecreatefromjpeg ("$_GET[bildnr].jpg");

$alt_breite = imagesx($bild);
$alt_hoehe = imagesy ($bild);


// Größe des Thumbs
$neu_breite = 300;
$neu_hoehe = round(($alt_hoehe / $alt_breite) * 300);

$thumb = imagecreate ($neu_breite, $neu_hoehe);

imagecopyresized ($thumb, $bild, 0, 0, 0, 0, $neu_breite, $neu_hoehe, $alt_breite, $alt_hoehe);

header ('HTTP/1.1 200 OK', true); 
header ('Date: '. gmdate ('D, d M Y H:i:s GTM'), true);
header ('Server: Apache/1.3.27', true);
header ('Accept-Ranges: bytes', true);
header ('Content-Type: image/jpeg', true); 

imagejpeg ($thumb);

?>
Wenn ich dann nun den Link für das Vorschaubild direkt in den Browser eingebe erhalte ich folgende wirre Ausgabe !




Hat jemand eine Idee wo mein Fehler liegt...??

gruss
Toby
 

mh1001

Lt. Commander
Dabei seit
Nov. 2003
Beiträge
2.039
Hallo,

wenn ich mir die Header-Daten des Ziels der in deinem Bild eingegebenen URLs anschaue sind diese auch inkorrekt.
Prinzipiell solltest es eigentlich reichen, wenn du folgende Header-Funktion einsetzt. Die anderen kannst du dabei ihmo außer Acht lassen.

PHP:
header("Content-type: image/jpeg");
MfG mh1001
 
Zuletzt bearbeitet:

Toby

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Mai 2003
Beiträge
107
@mh1001
Ok, ich habs versucht...das Ergebnis ist leider immer noch das Selbe. => wirre Zeichen.

gruss
Tobias
 

mh1001

Lt. Commander
Dabei seit
Nov. 2003
Beiträge
2.039
Das ist natürlich merkwürdig. In den Header Daten ist noch immer "Content-Type: text/html" als Content-Type vorzufinden.
So wie es scheint, scheint das senden von der Header mittels PHP nicht richtig zu funktionieren.
Probiere einmal folgendes:
Lege eine .htaccess-Datei mit folgendem Inhalt in dem Verzeichnis an:
Code:
RewriteEngine On

RewriteRule ^(.*)$ resizer.php?bildnr=$1
Probiere nun einmal, ob das Bild richtig angezeigt wird, wenn du es statt über "/resizer.php?bildnr=bildname" über "/bildname" aufrufst.

Ob das nun hilft kann ich nicht sagen. Ich kann mir allerdings auch nicht erklären, warum die Angaben in der header-Funktion nicht übernommen werden.

MfG mh1001

//Edit:

Ansonsten solltest du, auch wenn dies wohl nichts mit deinem eigentlichem Problem zu tun hat, statt imagecreate() die Funktion imagecreatetruecolor() verwenden.
 
Zuletzt bearbeitet:

Toby

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Mai 2003
Beiträge
107
@mh1001

wie du vermutet hast, an imagecreatetruecolor() lag es nicht - ich hab die funktion ersetzt = > keine Änderung.


Zur .htaccess
RewriteEngine On
RewriteRule ^(.*)$ resizer.php?bildnr=$1
$1 ?
Ich steh wohl etwas auf der Leitung...??? Mit $1 ist ein Beispiel gemeint.
Du meinst damit den Bildnamen ?
 

mh1001

Lt. Commander
Dabei seit
Nov. 2003
Beiträge
2.039
Wie aus obigen hervorgeht, scheint dein Server Probleme mit der PHP-header-Funktion zu haben.
Deswegen dachte ich mir, dass man diese Problematik je nach Servereinrichtung u.U. vielleicht durch eine serverseitige Umleitung mittels mod_rewrite umgehen könnte.
An obiger .htaccess-Datei brauchst du nichts ändern. Diese leitet lediglich alle Anfragen Muster "/x" auf "/resizer.php?bildnr=x" weiter. So wird bspw. "/beispiel.jpg" zu "resizer.php?bildnr=beispiel.jpg".
Mit "$1" wird dabei auf die entsprechende, der zuvor gefundenen Pattern zugegriffen.

MfG mh1001
 

matze.NET

Cadet 4th Year
Dabei seit
Juni 2004
Beiträge
127
Probier doch mal folgendes aus:

testimage.php
<?php
header ("Content-type: image/png");
$im = @ImageCreate (50, 100)
or die ("Kann keinen neuen GD-Bild-Stream erzeugen");
$background_color = ImageColorAllocate ($im, 255, 255, 255);
$text_color = ImageColorAllocate ($im, 233, 14, 91);
ImageString ($im, 1, 5, 5, "Ein Test-String", $text_color);
ImagePNG ($im);
?>
Wenn das funktioniert solltest du anderen header() mal aus deinem Skript nehmen.

Edit: Scheint aber auf jeden Fall (auch?) ein Serverproblem zu sein. Dein Code funktioniert bei mir einwandfrei.
 

V1tzl1

Lt. Junior Grade
Dabei seit
Sep. 2004
Beiträge
384
Auf jedenfall solltest du nach der Headerdefinition keinen Text mehr ausgeben, daher würd ich das imagecreate vor dem header ausführen, da im falle einer fehlermeldung sonmst auch nur wirre zeichen kommen
 

Toby

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Mai 2003
Beiträge
107
Zitat von matze.NET:
Probier doch mal folgendes aus:

testimage.php


Wenn das funktioniert solltest du anderen header() mal aus deinem Skript nehmen.

Edit: Scheint aber auf jeden Fall (auch?) ein Serverproblem zu sein. Dein Code funktioniert bei mir einwandfrei.

Funktioniert leider auch nicht.
Ich versteh nicht wieso meine Server da Probleme hat. Der Webspace liegt bei 1&1, das sollten eigentlich Standardeinstellungen sein...??
Kann es an einer falschen Einstellungen in der PHP.ini liegen ?
Oder kennt jemand ein fertiges Script das ich noch testen könnte ?

gruss
Toby
 

matze.NET

Cadet 4th Year
Dabei seit
Juni 2004
Beiträge
127
So, hab extra für dich mein 1&1 Webspace rausgekramt!
Bei mir funktioniert es komischerweise einwandfrei...

Probier mal deine Testdatei in name.php5 umzunennen.

1&1 benutzt mehre PHP Version (Bei funzt es aber mit beiden... komisch).
 

Toby

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Mai 2003
Beiträge
107
@Matze
mercy für Deine Mühe, aber es funktioniert auch nicht wenn ich die Php-Datei mit der Datei- Endung 'php4' oder 'php5' versehe.

Tja, ... *grübel*
 
Top