Sie benötigen eine Spezifikation, wie Ihre Daten bei der Verwendung als Bild dargestellt werden. Das ist viel wichtiger als ein vorhandener Code, der die Codierung durchführt.
Im Fall der Piet Language ist es genau das, was passiert - das ist die "Sprachspezifikation". Daraus haben die Leute itinnerpreters und Werkzeuge (in einer Vielzahl von anderen Sprachen, einschließlich einer Python interpreter) gebaut.
Aber wenn Sie beliebige Daten in ein Bild kodieren und dann wieder dekodieren wollen, müssen Sie zuerst sagen, wie Sie es kodieren wollen. Der einfachste Weg ist einer, bei dem jedes Datenbyte ein Farbkanal für ein Pixel ist, und eine Möglichkeit, die genaue Länge der codierten Daten zu bestimmen und die untersten Bildzeilen aufzufüllen. Dies wäre einfach mit Python Imaging Library (Kissen) s Image.frombytes
Methode zu tun
- obwohl sie kaum in einem gefälligen Bild führen würden.
Man könnte auch ein Python-Programm baut ein Piet Programm zu kompilieren, die „heraus schwappt“ die Eingangsdaten nur zurück, beliebige Daten gegeben - und dann die piet Interpreter oben könnten die Daten entschlüsseln.
Das Beispiel unten wird ein .wav Tondatei Pack (I tat dies nur an der Konsole Python) als Colorfull-Bild, pre-Warteschlange 4 Bytes für die Datenlänge, und Wattierung der unteren Pixel mit Schwarz.
import struct
from PIL import Image
data = open("2600PacManDies.wav", "rb").read()
size = struct.pack("<I", len(data))
image_side = int(((len(data) + len(size))/3.0) ** 0.5) + 1
img = Image.frombytes("RGB", (image_side, image_side) , size + data + b"\x00" * (image_side ** 2 * 3 - (len(size) + len(data)) ))
img.save("2600_pacman_dies.png")
(Obwohl, wie ich eine rohen Sound-Datendatei verwendet habe, kann man sogar einige Muster in den Daten entdeckt am Bild - die schwarzen Streifen die stillen Momente also die offensichtlichste sind)
Warum versuchen Sie diesen Thread zu schließen? – bodruk
Die Sprache Piet codiert keine Daten in Bildern. Der Quellcode von Piet-Programmen ist ein Bild, und ein Piet-Interpreter kann ein Piet-Quellbild ausführen. –
Mein naher Abstimmungsgrund wäre "unklar, was du fragst". Diese Frage ist unterspezifiziert. Das hat @jsbueno nicht davon abgehalten, einen tapferen Versuch zu unternehmen. –