Gd-Bild-Stream Problemfrage, Ausgabe/Speichern

CookieBuster

Erfahrenes Mitglied
Also, ich möchte mir gerne ein eigenes Captcha erstellen (Rechencaptcha um genau zu sein). Dafür nutze ich die IMG-Funktionen von PHP. Diese Funktionieren auch wunderbar, aber eben nur wenn ich den Header angebe (also zur Ausgabe). Genau das möchte ich aber nicht. Mit dem Modifizierten Header kann ich keinen Text mehr ausgeben =/

Wie schaffe ich es ein bereits erstelltes Bild, das ich in Einer Klassenvariable gespeichert habe, so abzuspeichern, dass ich es später mit echo oder ähnlichem ausgeben kann?

Bisheriger Quelltext zum erstellen des Bildes, vielleicht hilfts ja. Objektorientiert:
PHP:
class Captcha {
	private $BackgroundColor = NULL;
	private $TextColor = NULL;
	private $ImageString = NULL;
	private $Image = NULL;
	
	
	function __construct($x, $y) {
		$this->Image = @ImageCreate ($x, $y) or die ("Kann keinen neuen GD-Bild-Stream erzeugen");
	}
	
	public function Display() {
		// Header setzen
		header ("Content-type: image/png");
		
		$this->CreateBackgroundColor($this->Image);
		$this->CreateTextColor($this->Image);
		$this->CreateImageString();		      
		ImageString ($this->Image, 3, 50, 26, $this->ImageString, $this->TextColor);
		ImagePNG($this->Image);
	}
	
	public function CreateBackgroundColor($Image) {
		$this->BackgroundColor = ImageColorAllocate ($Image, 0, 0, 0);
	}
	
	public function CreateTextColor($Image) {
		$this->TextColor = ImageColorAllocate($Image, 255, 128, 0);
	}
	
	public function CreateImageString() {
		// TODO
		// Einen Zufallsstring erstellen
		$this->ImageString = "Zufallsstring";
	}
}
 
Moin,

über den Ausgabepuffer sollte dies möglich sein.

Ausgabepuffer starten->
Bild ausgeben->
Inhalt des Ausgabepuffers in Variable speichern->
Ausgabepuffer leeren
 
Funktioniert leider nicht
PHP:
// ----- Index.php ----------
include "captcha.php";
echo $GDImageStream;

echo "bump";

PHP:
// ------ captcha.php ---------
include "Captcha.class.php";
$Captcha = new Captcha(200, 70);
ob_start();
$Captcha->Display();
$GDImageStream = ob_get_contents();
ob_end_clean();


Das gibt er dann aus:
‰PNG  ??? IHDR???È???F???³,Iu???PLTE???ÿ€? |i???IDATxœc`£` Æà @Ê?]Üž!‡á`ƒ¦ 3CD°¥%|8ØÞoWSøñª OÚ‰ƒ=7g¤ÎF3O"-áÇÁ6‰ ƒ´Ä›23`‘é¹9¨ÝÕv ¿¿?ïçKø‹®Éý>‚FœzFÁ(h??Áô)‚ÿuü????IEND®B`‚bump

will heißen, das Bild nicht als Bild, sondern als Crypt. Header hab ich deaktiviert, weil das ja Vorraussetzung sein soll ;) (also das hier "header ("Content-type: image/png");" ist auskommentiert)
 
Das ist mir klar, aber genau das ist doch auch meine Frage.

Ich möchte dieses Bild naher in einer Datei ausgeben, in der noch mehr steht außer dieses Bild. Bisher schaffe ich es aber NUR mit dieser Headerangabe. Mit der Headerangabe kann aber eben nur dieses Bild angezeigt werden, kein sonstiger Inhalt.
 
Oh... rofl, hab ich nicht dran gedacht xD

Wie pack ich denn diesen Gd-Stream in einen IMG-Tag?

src="..." funktioniert nich... (die frage is bestimmt unendlich einfach, aber ich hab noch niemals mit sowas gearbeitet... :rolleyes:)
 
Du hast ein PHP-Skript, welches das Captcha erzeugt(was es da erzeugen soll, müsstest du über bspw. eine Session-Variable steuern, da du den erwarteten Wert ja später noch zum Vergleich benötigst)

Dieses PHP-Skript gibst du im <img> als src an...das ist alles.
 
ahhhh, vielen dank dir ;)

Die Session ist sowieso schon geplant, nur dieses dumme Bild, ich hatte es nicht geschafft ^^

*gleich mal testen geht*

vielen dank dir ;)
 
Zurück