Bildausgabe trotz header in ASCII-Code
Oddiwahn
- php
0 Thomas Luethi0 Oddiwahn
Hallo, ich möchte ein zuvor generierte Thumbnailbild erstmal im Browser ausgeben, um es evtl. noch zu drehen. Wenn ich das Thumbnail direkt speichere, funzt alles wunderbar, aber wenn ich es direkt durch den Browser ausgeben möchte, erscheint nur ASCII-Code. Der interessante Teil meines Skriptes sieht so aus:
$dest_img = imagecreatetruecolor($tn_width,$tn_height);
$tn_colorac=imagecolorallocate($dest_img,$tn_color[0],$tn_color[1],$tn_color[2]);
imagefill($dest_img,0,0,$tn_colorac);
imagecopyresampled($dest_img, $src_img, $x, $y, 0 ,0, $dest_width, $dest_height, $src_width, $src_height);
header("Content-type: image/jpeg");
imagejpeg($dest_img, "", $tn_quality);
Danke im Voraus,
Oddiwahn
Hallo,
header("Content-type: image/jpeg");
imagejpeg($dest_img, "", $tn_quality);
http://www.php.net/manual/de/function.imagejpeg.php
"Anmerkung: Die JPEG-Unterstützung können Sie nur verwenden,
wenn Sie PHP mit einer GD-Bibliothek ab Version 1.8 kompiliert haben."
Was sagt denn phpinfo() im Abschnitt "GD"?
Gruesse,
Thomas
Hallo,
header("Content-type: image/jpeg");
imagejpeg($dest_img, "", $tn_quality);http://www.php.net/manual/de/function.imagejpeg.php
"Anmerkung: Die JPEG-Unterstützung können Sie nur verwenden,
wenn Sie PHP mit einer GD-Bibliothek ab Version 1.8 kompiliert haben."Was sagt denn phpinfo() im Abschnitt "GD"?
Gruesse,
Thomas
Noe, das funzt alles, sonst hätte das Skript ja nicht die Thumbnail korrekt abgespeichert.
Das sagt PHPinfo:
gd
GD Support enabled
GD Version bundled (2.0.15 compatible)
FreeType Support enabled
FreeType Linkage with freetype
T1Lib Support enabled
GIF Read Support enabled
GIF Create Support enabled
JPG Support enabled
PNG Support enabled
WBMP Support enabled
XBM Support enabled
JIS-mapped Japanese Font Support enabled
Hallo,
Aha, also an der GD sollte es nicht liegen.
header("Content-type: image/jpeg");
Hast Du mal geprueft, ob dieser Header auch wirklich geschickt wird?
Und was sonst noch so fuer Header geschickt werden?
http://cgi.w3.org/cgi-bin/headers
mfg,
Thomas
Hallo,
Aha, also an der GD sollte es nicht liegen.
header("Content-type: image/jpeg");
Hast Du mal geprueft, ob dieser Header auch wirklich geschickt wird?
Und was sonst noch so fuer Header geschickt werden?
http://cgi.w3.org/cgi-bin/headersmfg,
Thomas
Ja, danke erstmal!
Also das Skript gibt mir folgendes aus (scheint doch OK zu sein):
200 OK
X-Cache: MISS from master1.funpic.de
X-Powered-By: PHP/4.3.4
Server: Apache/1.3.29 (Unix) PHP/4.3.4
Connection: close
Date: Sun, 21 Mar 2004 21:12:43 GMT
Content-Type: image/jpeg
Hallo,
Bitte zitiere nicht das gesamte Posting, sondern nur die Zeilen,
auf die Du Dich beziehst. Danke. </faq/#Q-09a>
Also das Skript gibt mir folgendes aus (scheint doch OK zu sein):
Naja, immerhin kommt schon mal der Content-Type-Header,
den Du angeben willst...
X-Cache: MISS from master1.funpic.de
Muss das sein? Was soll das bewirken?
Wuerde ich mal ausschalten, da es ein
potentieller Stoerfaktor ist.
Was fehlt, ist die Angabe der Byte-Menge.
Content-Length: 7482
oder so.
Vielleicht kannst Du die ja irgendwie berechnen
und als zusaetzlichen Header ausgeben.
Der (momentan erste) Benutzerkommentar auf
http://www.php.net/manual/en/function.imagejpeg.php
(andy-pearce dot com, 19-Feb-2004 12:42)
ist ein reines "Durchschleuser-Skript" fuer bestehende
Bild-Dateien. Es schickt Content-Type, Content-Length
und Content-transfer-encoding, und danach die
eigentlichen Bilddaten:
$filename = '/photoalbum/images/test.jpg';
header('Content-type: image/jpeg');
header('Content-transfer-encoding: binary');
header('Content-length: '.filesize($filename));
readfile($filename);
Wenn das immer noch nicht hilft:
Bist Du ganz sicher, dass das Skript nach den eigentlichen
Bilddaten gar nichts mehr ausgibst?
Auch kein Leerzeichen/Zeilenumbruch?
Das koennte es auch erklaeren, dass der Browser statt dem Bild
den "ASCII-Code" anzeigt.
Zur genaueren Diagnostik koenntest Du auch
1. das Bild direkt als erste Datei speichern
2. das, was das Skript ausgibt, abholen
und in einer zweiten Datei speichern
3. die beiden Dateien vergleichen
Gruesse,
Thomas
Hallo, nochmal!
Also erst,al vielen Dank für die Mühe!!!!!
Muss das sein? Was soll das bewirken?
Wuerde ich mal ausschalten, da es ein
potentieller Stoerfaktor ist.
Weiss auch nicht, was das ist / wie mans ausschaltet
Was fehlt, ist die Angabe der Byte-Menge.
Content-Length: 7482
oder so.
Ja, aber laut selfphp muss das ja gar nicht unbedingt sein, müsste auch ohne funzen
$filename = '/photoalbum/images/test.jpg';
header('Content-type: image/jpeg');
header('Content-transfer-encoding: binary');
header('Content-length: '.filesize($filename));
readfile($filename);
Hab ich auch schon versucht ;-)
Bist Du ganz sicher, dass das Skript nach den eigentlichen
Bilddaten gar nichts mehr ausgibst?
Auch kein Leerzeichen/Zeilenumbruch?
Also das Script gibt danach noch einiges aus.
Zum Test hab ich mal alles was danach kommt gelöscht, hat aber auch nix gebracht. Wahrscheinlich liegts einfach am Provider, oder so
Naja, hab jetzt genug Zeit damit verschwendet, wär zwar eleganter gewesen, aber is mir jetzt auch egal...
Aber nochmals VIELEN Dank für die freundliche Unterstützung!!!!
Grüße Christian O.
Hallo,
Weiss auch nicht, was das ist / wie mans ausschaltet
Naja, wenn _Du_ den X-Header nicht ausgibst, dann ist
er wohl ausserhalb Deines Einflussbereichs...
Was fehlt, ist die Angabe der Byte-Menge.
Content-Length: 7482
Ja, aber laut selfphp muss das ja gar nicht unbedingt sein, müsste auch ohne funzen
1. SelfPHP ist IMHO ziemlicher Schrott - eines der Dinge, die die Welt nicht braucht.
Ich schwoere auf das Manual und die dclp-FAQ.
2. Die Browser verlangen manchmal auch Dinge, die nicht vorgeschrieben sind.
Also das Script gibt danach noch einiges aus.
Das darf natuerlich nicht sein.
Das Skript darf _nur_ die Bilddaten ausgeben.
Zum Test hab ich mal alles was danach kommt gelöscht, hat aber auch nix gebracht.
Mach mal zur Sicherheit gleich nach der Zeile mit
imagejpeg()
ein exit; oder ein die();
Und dann versuch mal erneut, das Bild zu laden.
Evtl. vorher Browser-Cache leeren und/oder Browser neu starten.
Aber nochmals VIELEN Dank für die freundliche Unterstützung!!!!
Gerngeschehen.
Vielleicht kriegst Du's ja doch noch hin.
Und sonst hilft es vielleicht eines Tages jemandem, der im Archiv
nach imagejpeg() sucht...
Freundliche Gruesse + gute Nacht,
Thomas