Forum: PC-Programmierung PNG-Grafik mit PHP erstellen


von Peter Lustig Jr. (Gast)


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

von bluppdidupp (Gast)


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');

von Peter Lustig Jr. (Gast)


Lesenswert?

Danke, bringt aber nix...

von Test (Gast)


Lesenswert?

Mach die header Angaben raus....und btw ein paar php Tutorials würden 
dir gut  tun...

von Peter Lustig Jr. (Gast)


Lesenswert?

(y) Danke (y)


PS: Wenn ich Alles wüsst, wär ich nicht mehr hier ... da wär ich der 
Papst in Rom


Peter

von bluppdidupp (Gast)


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 ")

von Marcus W. (marcusaw)


Lesenswert?

Schmeiss die ganzen header-aufrufe raus und es funktioniert.

: Bearbeitet durch User
von xphp (Gast)


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.

von Läubi .. (laeubi) Benutzerseite


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.

von Lukas K. (carrotindustries)


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.

: Bearbeitet durch User
von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Lukas K. schrieb:
> Ich hab dein Skript mal getestet, bei mir funktioniert's

Da hast du xphp einiges vorraus ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.