erzeugtes Bild speichern

multimolti

Erfahrenes Mitglied
Hallo!
Ich habe mir ein PHP-Script geschrieben, um Banner zu erzeugen.
Aber das Problem ist: nachdem man auf erstellen klickt, zeigt er das Bild einfach an. Das wäre ja nicht schlecht, wenn man das Bild dann mit Rechtsklick speichern könnte. Aber dann bekommt man die Datei index.php.png und darin steht nur einen Error von meinem Script. Das Script geht aber fehlerfrei.

Jetzt habe ich mir gedacht, man könnte das so machen:
1. User gibt Daten ein und klickt auf erstellen
2. Server (PHP Script) verwertet Daten
3. Zufallszahl wird erstellt
4. Ein Bild mit $Zufallszahl.png wird erstellt
5. Dann wird $Zufallszahl.png angezeigt.

bis Schritt 4 bin ich gekommen, 5 wäre auch kein Problem, wenn 4 richtig gehen würde, denn:
wie sage ich PHP, dass es die Binär-Daten des Bildes in die PNG Datei speichern soll?
ich habe es versucht mit:

PHP:
$bild = ImagePNG($img);
fwrite(fopen($bildname, "a"), $bild);
aber dann bleibt die Datei leer, und ausserdem werden 2 Dateien erstellt, einerseits wegen dem fopen, das wegen "a" eine erstellt, und ausserdem wegen fwrite, das noch mal eine erstellt.

Frage 1: Wie mache ich, das es nur 1 Datei gibt?
Frage 2: Wie bekommt ich die Daten in die PNG?

Danke für eure Antworten!!

PS: schaut mal auf meiner Homepage vorbei: http://www.multimolti.de/
 
Zuletzt bearbeitet:
Schau dir mal die Parameter der imagepng()-Funktion an.

Das geht doch wunderbar, ich poste hier noch mal den Code, vielleicht ist es dann klarer:
PHP:
Header("Content-Type: image/png");
$titel = $_POST['titel'];
ImageTTFText ($img, 30, 0, $bildmitte_x, 50, $titelfarbe, $schriftart, $titel);
ImagePNG($img);
(Die Variablen stimmen alle, ich habe das hier nur gekürzt, sonst wäre es zu unübersichtlich, wenn meine ganzen if-befehle noch drin wären)

Und dann kommt darunter das mit dem Abspeichern:
PHP:
// Bild abspeichern
  srand((double)microtime()*1000000);
  $zahl1 = rand();
  $zahl2 = rand(1,100000);
  $zahl3 = rand(1,100000);
  $zufall = $zahl1*$zahl2+$zahl3;

$bild = ImagePNG($img);
$bildname = "bild_".$zufall.".png";
fwrite(fopen($bildname, "a"), $bild);

Das geht aber eben nicht. Es liegt nicht daran, das fclose($bildname); fehlt, die habe ich rausgenommen, damit nich 3 Dateien erstellt werden.

Aber mit $bild = ImagePNG($img); nimmt er nicht die Binärdaten vom Bild, sondern sonstwas.
Wie schaffe ich es, das er eben diese Binärdaten nimmt?
 
Vielleicht folgst du einfach mal meinem Ratschlag und schaust dir die Parameter der Funktion an.
 
oh, entschuldigung
das is ja zu einfach :D

damit haben sich dann alle meine fragen erledigt.
danke!
 
Zuletzt bearbeitet:
Zurück