S
Edit:
Achso, um es zu verdeutlichen:
Könnte es Zufall gewesen sein, dass das Bild zu laden ging? Hast Du den Dateipfad Testweise abgeändert, während du gleichzeitig von <img src="image.php"> auf .someclass { background-image: url(image.php); } umgemoddelt hast?
Es kann aber auch sein, dass im HTTP-Header mehr angegeben werden muss, als nur das Mime des Bildes. Eventuell hat dein Browser da eine lücke, dass das Bild via .someclass { background-image: url(image.php); } trotzdem geladen wird.
Auf den Umstand musst du dich aber nicht einlassen, weil ich zufällig genau weiss, dass solche Bildeinbinderei auch via <img ...> funktioniert. Der Server ist wohl einfach nur "offen" eingestellt und enthält wohl kaum eine Automatisierung der komplettierung von Header-Angaben in PHP.
Probiere mal folgendes:
header('Content-Disposition: Attachment;filename=image.png');
header('Content-type: image/png');
Da könnte es aber passieren, dass du das Bild auf einmal zum Download angeboten bekommst, was aber nicht sein kann, weil das Bild bzw. die URL nicht in der Adressleiste aufgerufen, sondern via <img ...> eingebunden wird.
Edit: Vergessen: Es wäre auch nicht schlecht, wie im folgenden Abschnitt zu sehen ist, auch noch zusätzlich noch auch Content-Length anzugeben.
<?php
// Output handler
function output_handler($img) {
header('Content-type: image/png');
header('Content-Length: ' . strlen($img));
return $img;
}
// Image output
ob_start("output_handler");
imagepng($im);
ob_end_flush();
?>
Ansonsten noch ein kleiner Tipp:
Im Fehlerfall gibt ImageCreateFromPNG() eine leere Zeichenkette zurück. Zudem wird eine Fehlermeldung erzeugt, die im Browser als Verbindungsabbruch dargestellt wird. Zum besseren Debuggen wird das folgende Beispiel einen JPEG-Fehler erzeugen:
function Loadpng ($imgname) {
$im = @ImageCreateFromPNG ($imgname); /* Versuch, Datei zu öffnen */
if (!$im) { /* Prüfen, ob fehlgeschlagen */
$im = ImageCreate (150, 30); /* Erzeugen eines leeren Bildes */
$bgc = ImageColorAllocate ($im, 255, 255, 255);
$tc = ImageColorAllocate ($im, 0, 0, 0);
ImageFilledRectangle ($im, 0, 0, 150, 30, $bgc);
/* Ausgabe einer Fehlermeldung */
ImageString($im, 1, 5, 5, "Fehler beim Öffnen von: $imgname", $tc);
}
return $im;
}
Quelle: http://php.net/manual/de/function.imagecreatefrompng.php