PNG-Grafik mit PHP erstellen

Gast #3895461
Lesenswert?

Hallo,
ich möchte eine PNG-Datei mit PHP erstellen, als Grundgerüst dient:
1
01.     <?php
2
02.     //
3
03.     header ("Content-type: image/png");
4
04.     $im = ImageCreate (300, 300); // Bild erstellen
5
05.     $color = ImageColorAllocate ($im, 255, 255, 255); //
6
06.     ImageString ($im, 1, 5, 5, "Blabla", $color); // Testtext schreiben
7
07.     ImagePNG ($im); // Bild "ausgeben"
8
08.     Imagedestroy ($im); // Zeiger wieder freigeben
9
09.     ?>

Damit wird die Grafik an den Browser übergeben und angezeigt.
Ich möchte die Grafik aber NICHT ausgeben, sondern als Datei speichern, 
dies sollte mit folgender Syntax gehen:
1
bool imagepng ( resource $image [, string $filename [, int $quality [, int $filters ]]] )

Also die Zeile 7 abändern in:
1
07.     ImagePNG ($im,"Blabla.PNG"); // Bild "speichern"

Und genau das geht nicht, als Fehlermeldung erscheint:

Die Grafik ".....php" kann nicht angezeigt werden, weil sie Fehler 
enthält.


??? Wer hat nen Tipp

Danke sagt Peter
Gast #3895466
Lesenswert?

Dank des "Content-Type"-Headers erwartet der Browser ein png-Bild. Wenn 
du die png aber nur auf dem Server speicherst (das macht der zweite 
Parameter von imagepng) und nicht mitsendest, bekommt der Browser keine 
Bilddaten und sagt dass das Bild das bei ihm ankommen sollte fehlerhaft 
ist.

Wenn der Browser die Datei beim Aufruf nur standardmässig speichern 
statt anzeigen soll, kann man dem Browser das einfach via 
"Content-Disposition"-Header beibringen:
header('Content-Disposition: attachment; filename="bilddatei.png');
Gast #3895814
Lesenswert?

1
<?php
2

3
header ("Content-type: image/png");
4
header('Content-Disposition: attachment; filename="bilddatei.png"');
5
$im = ImageCreate (300, 300); // Bild erstellen
6
$color = ImageColorAllocate ($im, 0, 255, 255); //
7
ImageString ($im, 1, 5, 5, "Blabla", $color); // Testtext schreiben
8
ImagePNG ($im); // Bild "ausgeben"
9
Imagedestroy ($im); // Zeiger wieder freigeben
10
?>
...funktioniert bei mir wunderbar. Im Post zuvor war allerdings bei der 
Header-Angabe noch ein Fipptehler drin (fehlendes ")
Gast #3914945
Lesenswert?

bluppdidupp schrieb:
> <?php
>
> header ("Content-type: image/png");
> header('Content-Disposition: attachment; filename="bilddatei.png"');
> $im = ImageCreate (300, 300); // Bild erstellen
> $color = ImageColorAllocate ($im, 0, 255, 255); //
> ImageString ($im, 1, 5, 5, "Blabla", $color); // Testtext schreiben
> ImagePNG ($im); // Bild "ausgeben"
> Imagedestroy ($im); // Zeiger wieder freigeben
> ?>
> ...funktioniert bei mir wunderbar. Im Post zuvor war allerdings bei der
> Header-Angabe noch ein Fipptehler drin (fehlendes ")

Da bin ich erstaunt... Header doppelt senden ohne "Header allready send" 
Fehler???

Irgendwie unglaubwürdig.
Persönliche Seite #3914974
Lesenswert?

xphp schrieb:
> Irgendwie unglaubwürdig.

Unglaubwürdig ist vor allem wenn man etwas nicht verstanden hat es nicht 
wenigstens mal auszuprobieren aber anderen was unterstellen will...
Erstmal kann man die GLEICHEN Header beliebig oft senden, ob das den 
Client Glücklich macht sei dahingestellt... UNTERSCHIEDLICHE Header zu 
senden ist absolut üblich und da spricht überhaupt nichts dagegen (und 
ist sogar oft zwingend).

xphp schrieb:
> "Header allready send"

Tritt nur auf wenn du NACHDEM du angefangen hast Inhalte zu senden 
nochmal versuchst eine weiteren Header zu senden. Solange man noch 
nichts gesendet hat (auch nicht implizit) kannst du soviele Header 
senden wie du magst.
#3915621
Lesenswert?

Header already sent, kommt auch dann, wenn vor dem beginnenden <?php 
bereits Zeichen sind. Seh nochmal nach, ob da wirklich kein Whitespace 
ist. Wenn da wirklich keiner ist, dann werf mal den Hexeditor an, 
vielleicht hat dein Editor ne UTF8-BOM an den Anfang geschrieben...
EDIT: Ich hab dein Skript mal getestet, bei mir funktioniert's.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren