@Der_Dirk: Bei der initialen Konvertierung wurde kein ”falscher” Code verwendet. Das ist ja Absicht, dass da ein Rätsel draus wird. Gab es noch weitere Hinweise?
Ich vermute einfach mal, dass in den Pixeldaten irgendwie ein PDF kodiert ist. Es ist ein RGB-Bild in dem aber nur genau 16 Farben verwendet werden. Das Histogram ist relativ gleichmässig, was man erwarten würde wenn die Pixel ein komprimierte Datei beschreiben:
Code: Alles auswählen
In [453]: img = Image.open("Downloads/Verschluesselt.png")
In [454]: img.getbands()
Out[454]: ('R', 'G', 'B')
In [455]: img.getcolors()
Out[455]:
[(60566, (255, 255, 255)),
(60345, (128, 128, 0)),
(58220, (0, 255, 255)),
(58645, (255, 0, 255)),
(54620, (128, 0, 0)),
(58126, (192, 192, 192)),
(56283, (0, 0, 255)),
(55475, (128, 0, 128)),
(53791, (128, 128, 128)),
(58324, (0, 128, 128)),
(56296, (0, 255, 0)),
(56745, (255, 0, 0)),
(55200, (0, 0, 128)),
(57579, (255, 255, 0)),
(51946, (0, 0, 0)),
(54143, (0, 128, 0))]
In [456]: len(img.getcolors())
Out[456]: 16
Die Pixeldaten liessen sich also auch mit nur vier Bit pro Pixel kodieren. Zwei Pixel liessen sich dann zu einem Byte zusammenfassen. Ich würde also als erstes versuchen herauszufinden ob man die Palette so anordnen kann, das unter diesen Bedingungen die ersten Pixel den Anfang einer PDF-Datei ergeben würden.
Edit: Die ersten Pixel mal manuell angeschaut und das sieht vielversprechend aus:
Code: Alles auswählen
In [463]: data[0,0]
Out[463]: (0, 128, 0)
In [464]: data[1,0]
Out[464]: (128, 0, 128)
In [465]: data[2,0]
Out[465]: (128, 0, 128)
In [466]: data[3,0]
Out[466]: (0, 0, 0)
In [467]: data[4,0]
Out[467]: (0, 0, 128)
In [468]: data[5,0]
Out[468]: (0, 0, 128)
In [469]: data[6,0]
Out[469]: (0, 0, 128)
Man vergleiche das mit den
Nibbles des Anfangs einer PDF-Datei, wo am Anfang immer eine Kennung für das PDF-Format steht:
Code: Alles auswählen
$ head -c 4 test.pdf | hd
00000000 25 50 44 46 |%PDF|
00000004
Koordinaten von 0 an zählend müssen Pixel 1 und 2 gleich sein. Pixel 3 ist 0 was auf (0, 0, 0) abgebildet wird, Und die Pixel 4, 5, und 6 müssen gleich sein. Passt prima zu den Daten.