Binärcode in Bild konvertieren?

8 Antworten

Ich habe gerade die andere Frage beantwortet und vermutlich meinst Du das SELBE SETI...

Da reicht ein Texteditor und die richtige Formatierung:

http://www.lamprechts.de/Bilder/SETI8_16.png

und verkleinert besser als Bild zu erkennen:

lamprechts.de/Bilder/SETI8_256klein.png

Außerirdischer aus 0 und 1 - (Mathematik, programmieren, Informatik)

Pogel 
Beitragsersteller
 07.05.2016, 17:21

Erstaunlicherweise war genau dies meine Intention, jedoch wollte ich die Gelegenheit nutzen, um nebenbei ein bisschen PHP zu lernen.

Vielen Dank!

1
hypergerd  08.05.2016, 20:15
@Pogel

Hallo Pogel, Dein Code ist noch umständlich:

a) die Farbe muss nicht zig mal Speicher beanspruchen (also raus aus Schleife)

b) statt mehrere if -> besser mit Array:

$breite = intval(359);$hoehe = intval(754);
$bh=$breite*$hoehe;
$bild = imagecreatetruecolor($breite, $hoehe);
$farbe[0] = imagecolorallocate($bild, 255, 255, 255);
$farbe[1] = imagecolorallocate($bild, 0, 0, 0);
for( $i = intval(0); $i < $bh; $i++ ) imagesetpixel( $bild, $i % $breite, (int)($i/$breite), $farbe[intval($code[$i])]);

http://www.lamprechts.de/gerd/php/PlotPNG.php

1

Nicht 1 sondern unendlich viele Algorithmen sind denkbar!

Nehmen wir Pi im Binärformat:

=11.00100100001111110110101010001000100001011010001100001000110100110001001100011001100010100010111000000011011100000111001101....

Unter 

http://www.lamprechts.de/gerd/Pi_Nachkommastellen_Bilder_visualisiert.html

findet man zig mögliche Algorithmen! Natürlich kann jedes dieser Bilder nachträglich in Schwarz-Weiß oder Graustufen konvertiert werden...

Was genau ist Dein Ziel? Oder suchst Du nur den primitivste aller Wege?

Dann schau Dir  "Weitere 13 Nullen ab 3186699200000 " das Bild an.

Einfach ein gleichgroßes SW-Bild im BMP-Format (unkomprimiert) nehmen und die Bytes austauschen (ohne Header zu verändern).

Ja, das geht, musst nur entscheiden ob 1 schwarz oder weiss sein soll und welches format das Bild haben soll (quadratisch/...). Und programmieren solltest du können.. Sprache?

Woher ich das weiß:Studium / Ausbildung – Informatikstudium

Pogel 
Beitragsersteller
 07.05.2016, 00:39

Bin gerade ein Neuling im Programmieren. PHP wäre für mich am gelegensten, aber da möchte ich mal nicht wählerisch sein.

Die 1 soll schwarz sein und das gewünschte Format ist 359x5299.

Ich habe bereits versucht mit Photoshop ein bmp zu batchen, hat aber nicht geklappt.

0
kingbongo  07.05.2016, 01:02
@Pogel

Das was du vor hast (aus 0 und 1 ein Schwarz Weiss Bild zu erstellen) ist relativ einfach. Mal das Beispiel anschauen:

php.net/manual/en/function.imagesetpixel.php

1
Pogel 
Beitragsersteller
 07.05.2016, 01:24
@kingbongo

Ich habs versucht, aber meine Programmierfähigkeiten sind da dann doch ein wenig eingeschränkt. Wie definiere ich die Koordinaten, die schwarz sein sollen?

0
kingbongo  07.05.2016, 02:35
@Pogel

Lern erst mal die Basics: Variablen, Schleifen, Bedingungen usw... danach weißt du wie du die Koordinaten setzen kannst. Selbstgelernt, statt vorgekaut, ist immer noch am besten.

1
fluffiknuffi2  07.05.2016, 10:36
@Pogel

Du hast einen String mit den Nullen und Einsen, den durchläufst du bpsw. mit einer for-Schleife. Außerdem hast du eine Variable x und eine Variable y, beide zunächst mit 0. Und dann zählst du x bei jeder Iteration 1 hoch bis es gleich der gewünschten Bildbreite ist. Ist das der Fall setzt du es auf 0 und erhöhst y um eins. Nun malst du mit dem Grafikbefehl deiner Wahl einen Pixel in das Bild an Position x / y und sagst halt einfach:
if ($NullenUndEinsen[$i] == 1) $farbe = 'black'; else $farbe = 'white';

Oder so ähnlich jenachdem was dein Pixelmalbefehl als Farbwerte akzeptiert. Vielleicht auch Hex-Werte, dann halt '#000000' bzw '#FFFFFF'.

1
Pogel 
Beitragsersteller
 07.05.2016, 11:15
@kingbongo

Habe mal versucht etwas für ein Beispiel zu schreiben, komme aber nicht mehr weiter. Könntest du meine Programmierkünste kritisieren/bewerten?

$code = "1111100110011111"

$x = "4"
$y = "4"

$bild = imagecreatetruecolor($x, $y)

for( $i = 0, $i < 16, $i++){
if($code[$i] == 1) {
$color = imagecolorallocate($bild, 0,0,0)
imagesetpixel( $bild, $i % 4, floor($i / 4),  $color)
}
}

0

fluffiknuffi2  07.05.2016, 10:30

Naja ich habe tatsächlich mal in C ein Programm geschrieben das BMPs ausgelesen hat... es ist kein Hexenwerk, aber trivial ist es auch nicht und in Anbetracht der Art wie die Frage gestellt wurde war (schon bevor es bestätigt wurde) klar, dass hier ein Anfänger am Werk ist. Denke der ist damit dann doch eher überfordert. :p

1

Du legst dir ein paar bytes fest welche für Bildinformationen bestimmt sind (Breite, Höhe...) dann brauchst du pro Pixel 2 Bytes einer gibt an wie groß der Schwarzanteil ist der Andere den Weißanteil. Schon hast du einen neuen Datentyp. Das musst du dann nur noch in einem Programm zurückrechnen und es darstellen.

Woher ich das weiß:Studium / Ausbildung – Informatikstudium