[ erweiterte Suche ]

»problem mit imagesetpixel

Benchmark: mysql, mysqli - Buffer, Cache und Prepared StmtNeues Thema eröffnenNeue Antwort erstellenDas Thema einem Freund empfehlenDas Thema druckenBenchmark: $gentime vs. filemtime (Filecache)
Seite 1 von 1 [4 Beiträge]
AutorNachricht
Beobachter 

Anmeldedatum: 11.10.2009
Beiträge: 2
Chats: 0
11.10.2009, 20:42


Hallo liebe Forum-User,

ich habe leider ein problem mit der Funktion imagesetpixel. In meinem Code würde ich gere einen Binär-String in ein Bild umwandeln. Das mache ich momentan mit folgendem code:
   Code:

//$b ist der binär code
$a = str_split($b);
$z = strlen($b);
//seitenlänge des bildes bestimmen:
$x = round(sqrt($z));
//bild erzeugen <-- bis hirhin functioniert auch noch alles ohne probleme
$im = ImageCreate ($x,$x);
for($c=1; $c<=$x; $c++){
       for($y = 1; $y<=$x; $y++){
              // position im array bestimmen:
               $d = $c*$y;
               switch($a[$d]){
                       case '0':
                               if(imagesetpixel($im, $x, $y, ImageColorAllocate ($im, 0, 0,
0))===FALSE){die('FAIL');}
                       break;
                       case '1':
                               if(imagesetpixel($im, $x, $y, ImageColorAllocate ($im, 255, 255,
255))===FALSE){die('FAIL');}
                       break;
               }
       }
}


Das Problem ist, dass momentan das gesammte bild schwarz gefärbt wird... Ich hoffe ihr seht den Fehler und könnt mir helfen.


mfg
FRED
Nach obenprofil pn
Administrator 


Name: Marc
Geschlecht:
Anmeldedatum: 28.08.2004
Beiträge: 39677
Chats: 11125
Wohnort: Hennef


Meine eBay-Auktionen:
11.10.2009, 21:38


Hi,

mein Lösungsvorschlag soweit:
   Code:
<?php

if (isset($_GET['debug'])) {
define('DEBUG', 1); // um die meldungen, statt das bild auszugeben
}

// binärdaten
// funktioniert, da 9 stellen = wurzel 3 ist, ohne runden zu müssen
$b = '100000100';
// funktioniert nur bedingt, da gerundet werden muss (mögliche lösung im switch)
$b = '1111101111111110000000000010101010100100000000000001000001000000000000000000000111111111111111111101001001010100000000000000000';

if (defined('DEBUG')) {
echo('Binär: ' . $b . '<br />');
}

// länge von binär
$l = strlen($b);

// wurzel = seitenlänge
$sqrt = sqrt($l);

// seitenlänge gerundet (aufrunden, wir wollen ja keine werte verlieren)
$max_x = $max_y = ceil($sqrt);

if (defined('DEBUG')) {
echo('Bildgröße: ' . $max_x . 'x' . $max_y . ' (Wurzel war ' . $sqrt . ' aus ' . $l . ')<br />');
}

// bild erzeugen
$im = imagecreate($max_x, $max_y);

// farben erzeugen (aus performancegründen außerhalb der schleife / on-the-fly geht nicht)
// erste farbe füllt automatisch das generierte bild
$white = imagecolorallocate ($im, 255, 255, 255);
$black = imagecolorallocate ($im, 0, 0, 0);

// zähler für die position in binär
$p = 0;

// zählen beginnt immer bei 0, d.h. 1x1 ist in wirklichkeit 0x0
for($y = 0; $y < $max_y; $y++) {
for($x = 0; $x < $max_x; $x++) {
if (defined('DEBUG')) {
echo(($x+1) . 'x' . ($y+1) . ' Position in Binär: ' . $p);
}
switch($b{$p}){
case '0':
imagesetpixel($im, $x, $y, $white);
if (defined('DEBUG')) {
echo(' weiß (0)');
}
break;
case '1':
imagesetpixel($im, $x, $y, $black);
if (defined('DEBUG')) {
echo(' schwarz (1)');
}
break;
default:
// auf grund der rundungsfehler könnte man hier den rest weiß füllen lassen
imagesetpixel($im, $x, $y, $white);
if (defined('DEBUG')) {
echo(' weiß (kein Wert)');
}
}
if (defined('DEBUG')) {
echo('<br />');
}
// position hochzählen
$p++;
}
}

if (!defined('DEBUG')) {
// bild ausgeben
header('Content-Type: image/png');
imagepng($im);
}
// speicher freigeben
imagedestroy($im);

?>


Wie Du siehst, musst Du Dir Gedanken darüber machen, was Du machst, wenn Du keine Daten mehr hast. Also ob der Rest weiß werden soll oder wie auch immer.

Die x und y Schleifen habe ich gedreht, da ich davon ausgehe, dass Du in der 1. Zeile von links nach rechts durchlaufen willst und dann in die 2. Zeile gehen willst. In Deiner Variante wärst Du spaltenweise durchgegangen.

str_split brauchst Du nicht, da man mit {} auf die Position eines Strings zugreifen kann. Ruf das script z.b. als test.php auf und Du siehst das Bild. Ruf es mit test.php?debug, um die verschiedenen echo-Ausgaben sehen zu können.

Gruß
Nach obenprofil pn email
Beobachter 

Anmeldedatum: 11.10.2009
Beiträge: 2
Chats: 0
11.10.2009, 22:14


hi danke für die schnelle antwort :)
funktioniert auch wie gewollt, nur leider geht das mit dem decoden noch nicht... hier der code beider functionen, vllt wird dann alles übersichtliger:
   Code:

function imgtov($co, $u){
for($x=0;$x<=$u;$x++){
$co = base64_decode($co);
}
$im = 'uit/'.$_SESSION['login']['pw'].$_SESSION['login']['hash'].'.jpg';
file_put_contents($im, $co);
$ima = imagecreatefromjpeg($im);
$ims = getimagesize($im);
$iw = $ims[0];
$ih = $ims[1];
for($x = 1; $x < $iw; $x++){
for($y = 1; $y < $ih; $y++){
$ot = imagecolorat($ima, $x, $y);
$rgb = imagecolorsforindex($ima,$ot);
if($rgb['red']!='0'){
$out .= '0';
} else {
$out .= '1';
}
}
}
unlink($im);
return $out;
}

function vtoimg($b){
$l = strlen($b);
$sqrt = sqrt($l);
$max_x = $max_y = ceil($sqrt);
$im = imagecreate($max_x, $max_y);
$white = imagecolorallocate ($im, 255, 255, 255);
$black = imagecolorallocate ($im, 0, 0, 0);
$p = 0;
for($y = 0; $y < $max_y; $y++) {
   for($x = 0; $x < $max_x; $x++) {
  switch($b{$p}){
case '0':
imagesetpixel($im, $x, $y, $white);
break;

case '1':
imagesetpixel($im, $x, $y, $black);
break;

default:
imagesetpixel($im, $x, $y, $white);
break;
  }
  $p++;
   }
}
$d = new date;
$now = $d->now('timestamp');
$fname = 'cit/'.$now.$_SESSION['login']['hash'].'.jpg';
  fclose(fopen($fname, 'a'));
imagejpeg($im,$fname);
$co = file_get_contents($fname);
$rd = rand(1,9);
for($x=0; $x<=$rd; $x++){
$co = base64_encode($co);
}
unlink($fname);
return $co.'__::__'.$rd;
}



bei der ersten funktin kommt als return leider nix raus

hoffe auf weiterhin schnelle hilfe :)
mfg
FRED
Nach obenprofil pn
Administrator 


Name: Marc
Geschlecht:
Anmeldedatum: 28.08.2004
Beiträge: 39677
Chats: 11125
Wohnort: Hennef


Meine eBay-Auktionen:
11.10.2009, 22:52


spontan sehe ich schonmal, dass du die schleifen wieder gedreht hast. und du beginnst bei 1x1 pixel. richtig wäre 0x0, da php wie gesagt bei 0 mit zählen anfängt. dann hast du keine lösung für die aufgefüllten ungültigen weißen pixel (default). wenn du das bild wieder umkehrst, führt das ja zu einem fehlerhaften binary, weil es länger ist als das original.

da solltest du lieber hingehen und die unnützen bildpunkte mit einer dritten farbe auffüllen und beim einlesen diese dritte farbe ignorieren. damit es nicht so auffällt, könntest du ja ein 1 punkt geringeres schwarz oder weiß nehmen.

ansonsten lass dir doch einfach erstmal das bild ausgeben:
   Code:
$ima = imagecreatefromjpeg($im);


ob das überhaupt funktioniert. ich vermute, dass die funktion nichts zurückgibt, weil das bild einfach nicht da ist und deswegen gibts auch keine größe und dann läuft auch keine schleife.
Nach obenprofil pn email
Gast 

11.10.2009, 22:52


Mach mit!

Wenn Dir die Beiträge zum Thema "problem mit imagesetpixel" gefallen haben oder Du noch Fragen hast oder Ergänzungen machen möchtest, solltest Du Dich gleich bei uns anmelden:

    » Anmelden

Registrierte Mitglieder genießen die folgenden Vorteile:
✔ kostenlose Mitgliedschaft
keine Werbung
✔ direkter Austausch mit Gleichgesinnten
✔ neue Fragen stellen oder Diskussionen starten
✔ schnelle Hilfe bei Problemen
✔ Bilder und Videos hochladen
✔ und vieles mehr...

Verwandte Suchbegriffe

imagesetpixel, imagesetpixel beispiel jpg, php seitenlänge einlesen, imagesetpixel als bild, bilddatei binärcode umwandeln, php seitenlänge image, imagesetpixel weiss, php for schleife binär hochzählen, imagesetpixel black, imagesetpixel beispiele, imagesetpixel php farbe, binärcode bild umwandeln, imagesetpixel benchmark, strlen timestamp mit nullen auffüllen, imagesetpixel does not work, generiertes bild schwarz, imagesetpixel schleife, (defined( php, php imagesetpixel, php binärcode pixel umwandeln
Nach oben
Seite 1 von 1 [4 Beiträge]
Neues Thema eröffnenNeue Antwort erstellen
Ähnliche BeiträgeRe:HitsLetzter Beitrag
ej1 mit 1000 watt sub + problem mit stromversorgung
hy jetzt kommt ein etwas langer text aber vielleicht nimmt sich ja jemand die zeit danke schon mal fürs lesen ( haha ) ich hab in meinem ej1 nur ne 45 ah batterie, und jetzt kommt das problem ich baue bald 2 x 500watt rms verstärker ein ,jeder von...
Seite 2, 3, 4von dragsta
36176110.08.2007, 16:56
manu_eh6
Problem mit Abgasanl. MIT VIDEO !!! NICHT gelöst :-(
Da die Winterbitch ja nen anderes Heck bekommen hat habe ich den Magna etwas (ca. 6cm) höher gelegt, also einfach die Hater gekürzt und gut schon war er höher. Naja Abgas anlage schlägt nirgens an oder sonstiges nur hört er sich an wie ein Trecker oder...
Seite 2, 3, 4von Black-Undercover
3479606.04.2011, 20:22
Heizer_Sascha
Problem mit Drehzahlbegrenzer EG4 mit MPFI SWAP
Hallo, habe einen EG4 mit MPFI SWAP (Teile vom ED7). Hab den Kabelbaum vom EG4 beibehalten und abgeändert. Läuft ohne Fehlercodes oder dergleichen. Hab auch schon ein 2tes Steuergerät probiert und das Problem bleibt. Es ist ganz komisch ab und zu...
von FloKastl
04430.08.2011, 17:02
FloKastl
Problem mit Zv
Hallo, da miene Fernbedienung für meine Zv nicht mehr geht war ich bei Honda und der hat mir gesagt das sie total im Arsch wär und das mich eine neue 136 Euro kosten würde. Jetzt könnt ich eine gebrauchte bekommen, aber da die nicht angelernt...
von BornTobiWild
362008.12.2006, 12:06
Vtec-Power
Problem mit Stellmotor
Hi, ich hab zur Zeit nach meinem Unfall Nachbau - Stanley Scheinwerfer eingebaut und hab nun auch beide Arten von Stellmotoren hier. Also die mit dem Gewinde und die mit diesem Bajonettverschluss, sprich diesem dreieckigen Dingens. Allerdings hat der...
von Cyclone
010519.04.2009, 23:07
Cyclone
problem mit shortshifter! need help!
hi leutz! folgendes: hab mir gestern nen shortshifter eingebaut und jetzt is zwischen dem shifter und meinem mitteltopf nur noch ein paar mm platz und des scheppert und tut und macht die ganze zeit... wir hams schon versuch indem wir die...
von optix_eg5
818622.08.2008, 09:28
gigiagig
problem mit f.krümmer
Hi leute ich habe das problem das mein fächerkrümmer immer aufzetzt (dc b16 4-1) hat jemand eine ahnung bei welchem krümmer das nicht so ist. d16...
von honda16v
89321.06.2011, 20:43
1HGEJ2
Problem mit Lieferanten...
tach, habe folgendes Problem: Habe bei der Firma VTSP GmbH am 28.11 Konsolen für meine Sportsitze gekauft, die ich auch am 30.11 bezahlt habe. Leider habe ich bis dato keine Ware erhalten, und auch nur eine Email, das es Probleme mit dem...
Seite 2von hondata
1063603.01.2007, 15:40
hondata
Problem mit Drehzahl
Die Drehzahl geht im Stand fortlaufend runter und wieder hoch. Man sieht es daran, dass der Drehzahlmesser sich immer so um 1mm bewegt und man merkt jedes Mal ein kleines Ruckeln. Weiterhin steht er im Stand manchmal nur bei 500rpm. Und der Auspuff...
von EG3_Berlina
452227.01.2008, 12:51
joker86
Problem mit Navi
Hallo,ich möchte mich kurz vorstellen. Mein Name ist Michael,und bin seit 2004 im Besitz einen Honda Accord Tourer 2.4 Type S. Ich habe im Moment ein Problem mit einem Navi. (Werksnavi) Da bei mir nur noch DVD Lesefehler angezeigt wird,habe ich...
von malawicichlide
321125.05.2011, 02:12
booni
© 2004 - 2012 www.programmierer-forum.de (srv02) | Communities | Impressum