Array per Session übergeben

Alaniak

Erfahrenes Mitglied
Hallo zusammen,
ich bin da schon länger an einem Problem dran. Und zwar erstelle ich aus Flash heraus ein Bild. Dazu übergeb ich ein Array mit allen Pixeln des Bildes an ein PHP-Skript, dass das Bild "zusammensetzt".
Das klappt auch wunderbar.

Jetzt möchte ich allerdings noch weitere Daten genauer gesagt Text an das PHP Skript übergeben, so dass das Bild und darunter der Text angezeigt wird. Dazu übergebe ich das Pixelarray an meine PHP Seite, die das Array wiederrum per Session an das Bildskript übergibt. Allerdings klappt das dann nicht mit der Bilderstellung und ich hab keine Ahnung warum.

Hier die Ausgabeseite:
PHP:
<?php
	session_start();
	$_SESSION['data'] = $_POST['px'];
	$_SESSION['width'] = $_POST['width'];
	$_SESSION['height'] = $_POST['height'];
?>
<html>
    <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head>
    <body> 
        <p><?php echo "<img src=\"pixels.php\"/>"; ?></p>
        <p><?php echo $_POST['text']; ?></p>
    </body>
</html>

...und das Bildskript:
PHP:
<?php
session_start();
error_reporting(0);
/**
 * Get the width and height of the destination image
 * from the POST variables and convert them into
 * integer values
 */
$w = (int)$_SESSION['width'];
$h = (int)$_SESSION['height'];

// create the image with desired width and height
$img = imagecreatetruecolor($w, $h);

// now fill the image with blank color
// do you remember i wont pass the 0xFFFFFF pixels 
// from flash?
imagefill($img, 0, 0, 0xFFFFFF);

$rows = 0;
$cols = 0;

// now process every POST variable which
// contains a pixel color
for($rows = 0; $rows < $h; $rows++){
	// convert the string into an array of n elements
	$c_row = explode(",", $_SESSION['data' . $rows]);
	for($cols = 0; $cols < $w; $cols++){
		// get the single pixel color value
		$value = $c_row[$cols];
		// if value is not empty (empty values are the blank pixels)
		if($value != ""){
			// get the hexadecimal string (must be 6 chars length)
			// so add the missing chars if needed
			$hex = $value;
			while(strlen($hex) < 6){
				$hex = "0" . $hex;
			}
			// convert value from HEX to RGB
			$r = hexdec(substr($hex, 0, 2));
			$g = hexdec(substr($hex, 2, 2));
			$b = hexdec(substr($hex, 4, 2));
			// allocate the new color
			// N.B. teorically if a color was already allocated 
			// we dont need to allocate another time
			// but this is only an example
			$test = imagecolorallocate($img, $r, $g, $b);
			// and paste that color into the image
			// at the correct position
			imagesetpixel($img, $cols, $rows, $test);
		}
	}
}

// print out the correct header to the browser
header("Content-type:image/jpeg");
// display the image
imagejpeg($img, "", 90);
imagedestroy($img);

session_destroy();
?>
 
error_reporting(0); ist sehr sinnvoll wenn man Fehler sucht :rolleyes:

Schraub den Wert mal rauf:
PHP:
error_reporting(E_ALL);
Dann kommentiere header("Content-type:image/jpeg"); aus:
PHP:
//header("Content-type:image/jpeg");

Als nächstes rufst du pixels.php auf, aber achte darauf dass
PHP:
$_SESSION['data'] = $_POST['px'];
    $_SESSION['width'] = $_POST['width'];
    $_SESSION['height'] = $_POST['height'];
reguläre Werte enthalten so wie wenn du das Bild in die "Ausgabeseite" einbindest. Notfalls fügst du an den Anfang des "Bildscripts" noch
PHP:
$_SESSION['data'] = array(); //mit Werten füllen die dort reinsollen
    $_SESSION['width'] = array(); //mit Werten füllen die dort reinsollen
    $_SESSION['height'] = array(); //mit Werten füllen die dort reinsollen
hinzu.

Dann schaust du mal ob Fehler auftreten. Wenn du sie nicht selbst beheben kannst, kannst du sie ja hier posten!

Gruß
 
Hi,

auf Deiner Ausgabeseite setzt Du in der Session eine Variable $_SESSION['data'] mit dem Inhalt von $_POST['px'] (was auch immer da genau drin steht).

Wie kommst Du nun darauf, das in der Session die Variablen $_SESSION['data0'], $_SESSION['data1'], $_SESSION['data2'],... gesetzt sind?

Code:
for($rows = 0; $rows < $h; $rows++){
    // convert the string into an array of n elements
    $c_row = explode(",", $_SESSION['data' . $rows]);

;)

LG
 
Habs jetzt hinbekommen. Da war ein kleiner Denkfehler drin:
PHP:
<?php
	session_start();
	for($rows = 0; $rows < $_POST['height']; $rows++){
		$_SESSION['px'.$rows] = $_POST['px'.$rows];
	}
	$_SESSION['width'] = $_POST['width'];
	$_SESSION['height'] = $_POST['height'];
?>
<html>
...
 
Zurück