Hallo Leute!
Ich benutze Flash, um einen String aufzubauen, der Positionen/Linienstärke/Farben beim Malen in Flash speichert und anschliessend an PHP übergibt...
Der String sieht dann für eine Linie so aus:
100_100_200_343_1_0_0_0-
Bei zwei Linien geht es dann analog weiter:
100_100_200_343_1_0_0_0-400_400_200_100_1_0_0_0-
Also die Eigenschaften werden mit Unterstrich getrennt, und die gesamte einzelne Linie wird mit Bindestrich getrennt...
Die ersten 4 Werte sind die x1,y1,x2,y2 - Positionen für die Linie;
Der 5te Wert ist die Linienstärke und die letzten 3 Werte sind die Farbwerte für RGB (in diesem Fall 0,0,0 für schwarz)!
Soweit so gut - die Daten werden perfekt übergeben und das JPEG wird in PHP auch super gespeichert.
Das Problem kommt erst bei den Farbwerten.
Die Farbwerte werden falsch interpretiert - aber nicht immer. Und ganz wichtig: Wenn der bug auftritt, so stimmen trotzdem die übergebenen Werte!!!
Ich konnte folgendes beobachten:
[1] Solange ich wenig male (wenige Linien) stimmen die Farbwerte (der Datenstring ist nicht zu gross)
[2] Sobald ich viel male stimmen die Farbwerte nicht mehr (datenstring relativ gross)
--->aber die übergebenen Farbwerte stimmen, mit ECHO getestet...
Nun ein Auszug aus dem PHP-Script, das die Daten empfängt und das JPEG speichert, ich hoffe genügend dokumentiert:
PHP-Quellcode:
Kann es mit Speicherzuweisungen zu tun haben, das der Fehler auftritt, wenn der Datenstring zu gross wird?
Danke für eure Mithilfe...
Ich benutze Flash, um einen String aufzubauen, der Positionen/Linienstärke/Farben beim Malen in Flash speichert und anschliessend an PHP übergibt...
Der String sieht dann für eine Linie so aus:
100_100_200_343_1_0_0_0-
Bei zwei Linien geht es dann analog weiter:
100_100_200_343_1_0_0_0-400_400_200_100_1_0_0_0-
Also die Eigenschaften werden mit Unterstrich getrennt, und die gesamte einzelne Linie wird mit Bindestrich getrennt...
Die ersten 4 Werte sind die x1,y1,x2,y2 - Positionen für die Linie;
Der 5te Wert ist die Linienstärke und die letzten 3 Werte sind die Farbwerte für RGB (in diesem Fall 0,0,0 für schwarz)!
Soweit so gut - die Daten werden perfekt übergeben und das JPEG wird in PHP auch super gespeichert.
Das Problem kommt erst bei den Farbwerten.
Die Farbwerte werden falsch interpretiert - aber nicht immer. Und ganz wichtig: Wenn der bug auftritt, so stimmen trotzdem die übergebenen Werte!!!
Ich konnte folgendes beobachten:
[1] Solange ich wenig male (wenige Linien) stimmen die Farbwerte (der Datenstring ist nicht zu gross)
[2] Sobald ich viel male stimmen die Farbwerte nicht mehr (datenstring relativ gross)
--->aber die übergebenen Farbwerte stimmen, mit ECHO getestet...
Nun ein Auszug aus dem PHP-Script, das die Daten empfängt und das JPEG speichert, ich hoffe genügend dokumentiert:
PHP-Quellcode:
PHP-Code:
<?php
//dieser Datenstring enthält die Eigenschaften aller Linie
$data=$HTTP_POST_VARS["data"];
// truecolor image für das JPEG erstellen
$image=imagecreatetruecolor(500,200);
// internes Bild aufbauen, das dann zum JPEG gespeichert wird
$imagelines=imagecreate(500,200);
// Hintergrundfarbevariable festlegen
$background=imagecolorallocate($imagelines,255,255,255);
// Datenstring aufbrechen und in Linien teilen - siehe oben immer beim Minuszeichen!
$lines=explode("-",$data);
// loop durch diese einzelnen Linien
for($l=1;$l<count($lines)-1;$l++){
// Linieneigenschaften (siehe oben) werden extrahiert jeweils beim Unterstrich
$lineData=explode("_",$lines[$l]);
// dadurch erhalte ich:
//$lineData [0] bis [3] für die Linien-x,y-Werte
//$lineData [4] ist die Linienstärke
//$lineData [5] bis [7] R,G,B-Werte
// Variablen übergeben und anschliessend Linien zeichnen
imagesetthickness($imagelines, $lineData[4]);
$r = $lineData[5];
$g = $lineData[6];
$b = $lineData[7];
//übrigens - bei diesem Echo stimmen noch alle FarbWerte, auch wenn der Bug auftritt
//das verblüfft mich so, da ich gerade hier den Fehler erwartet habe
echo $r ." , ". $g . " , " . $b . " --- ";
//hier wird die Linienfarbe immer wieder gesetzt
$linecolor=imagecolorallocate($imagelines,$r,$g,$b);
// und die Linien werden im internen Bild mit den Eigenschaften gemalt!
imageline($imagelines,$lineData[0],$lineData[1],$lineData[2],$lineData[3],$linecolor);
}
// das intern gemalte Bild wird nun ins truecolor $image übertragen und anschließend als JPEG gespeichert
imagecopyresampled($image,$imagelines,0,0,0,0,500,200,500,200);
imagejpeg($image,"created.jpg");
?>
Danke für eure Mithilfe...
Kommentar