2016-03-30 6 views
0

Gibt es eine Bibliothek in Python, die Daten in Bitmap-Muster codiert und Bilder in Daten decodiert, wie die Piet Sprache?Zeichenketten zu Bild mit Python codieren

Hallo Welt mit Piet

Hello World with Piet

UPDATE

Ich möchte einen String erhalten, wie Hallo, Welt einer URL oder und codieren es als Bild, dann lese dieses Bild und entschlüssele es zu einem String. So etwas wie ein QR-Code, aber mit Bitmap.

+0

Warum versuchen Sie diesen Thread zu schließen? – bodruk

+0

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. –

+1

Mein naher Abstimmungsgrund wäre "unklar, was du fragst". Diese Frage ist unterspezifiziert. Das hat @jsbueno nicht davon abgehalten, einen tapferen Versuch zu unternehmen. –

Antwort

0

Abhängig von Ihrem Plan für image manipulation oder image processing, Python Image Library PIL kann das sein, was Sie suchen.

Unten finden Sie eine Demo-Code, der eingebaute Filter gilt, abgeleitet von here Es gibt zahlreiche andere Bildverarbeitung und Pixelmanipulation innerhalb PIL verfügbar sind

Demo-Code

from PIL import Image 
from PIL import ImageFilter 

i = Image.open("gImage1.jpg") 
im2 = i.filter(ImageFilter.EMBOSS) 
im3 = i.filter(ImageFilter.FIND_EDGES) 

im2.save("gImage1_EMBOSS.jpg") 
im3.save("gImage1_FIND_EDGES.jpg") 

Eingang Bild

Input Image

Ausgabe Bilder
EMBOSS Filter

FIND EDGES FILTER

+0

Und wie lenkt die Fähigkeit, Bilder zu laden oder Filter anzuwenden, die OP-Frage? – jsbueno

1

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") 

enter image description here

(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)

+0

Ich habe meine Frage bearbeitet! – bodruk

+0

Ja, aber trotzdem berührt die andere Antwort nicht das, was Sie tatsächlich fragen, während ich versuche, es zu beantworten. – jsbueno