Ich habe eine Datei, font_file.bdf, und müssen die darin enthaltenen Zeichen als numpy Arrays, wo jedes Element ein Pixel ist.Numpy Array von Zeichen in BDF-Datei
Hier ist der Ausschnitt dieser Datei, der das '?' Zeichen:
STARTCHAR question
ENCODING 63
SWIDTH 1000 0
DWIDTH 6 0
BBX 5 7 0 0
BITMAP
70
88
08
10
20
00
20
ENDCHAR
Ich recherchierte .bdf-Dateien, um zu verstehen, wie sie Daten kodieren. Im Grunde genommen handelt es sich um eine Bitmap mit einer Bittiefe von 1. Ich habe ein Kissenmodul namens PIL.BdfFontFile gefunden, das bdf-Dateien interpretieren kann. Nachdem er mit diesem Modul ein Experimentieren, während ich in der Lage war, ein PIL Bild für jedes der Zeichen in der Schriftart zu erhalten und speichern Sie sie, um zu sehen, dass es wie so funktioniert:
from PIL.BdfFontFile import BdfFontFile
fp = open("font_file.bdf", "r")
bdf_file = BdfFontFile(fp)
bdf_file.compile()
char = '?'
_, __, bounding_box, image = bdf_file[ord(char)]
image.save(char + ".png")
Das gespeicherte Bild wie folgt aussieht: Question Mark. und wenn man seine Eigenschaften betrachtet, hat es eine Bittiefe von 1, was einen Sinn ergibt. (Ich bin nicht sicher, warum es umgekehrt zu sein scheint, aber ich konnte diese Art von Manipulation mit numpy tun, wenn nach wie vor erforderlich.)
Einmal hatte ich, dass ich versuchte, eine numpy Array zu konvertieren:
print numpy.array(image, dtype=numpy.int)
, die mir eine Reihe gab, die nicht mehr das entsprechende Zeichen zu repräsentieren scheint mehr:
[[1 1 1 1 1]
[0 1 0 1 1]
[1 1 1 1 1]
[1 1 1 1 0]
[1 0 1 0 1]
[1 0 1 1 1]
[0 1 1 1 1]]
ich etwas Hoffnung, dass mehr sah wie folgt aus:
[[0 1 1 1 0]
[1 0 0 0 1]
[0 0 0 0 1]
[0 0 0 1 0]
[0 0 1 0 0]
[0 0 0 0 0]
[0 0 1 0 0]]
Im schlimmsten Fall könnte ich selbst einen Algorithmus erstellen, der die Daten im PIL-Bild in ein numpliges Array konvertiert, aber ich glaube, dass es einen einfacheren Weg geben muss, wenn ich zwischen PIL-Bildern und numpy Arrays umwandele (Es ist normalerweise ziemlich einfach.)
Irgendwelche Ideen über, wie man das PIL Bild erhält, um in ein numply Array richtig zu konvertieren oder eine andere Lösung zu meinem Problem würde geschätzt werden.
Was bedeutet 'image' aussehen, bevor Sie versuchen, konvertieren es zu einem numply array? – Anonymous
@jphollowed, Es sieht wie ein Fragezeichen aus (obwohl die Pixel im Zeichen weiß sind und der Hintergrund schwarz ist). Ich habe das Bild beigefügt, obwohl es ein extrem kleines Bild ist, ist es schwer zu sehen. –
nein ich meine, was Tour-Variable 'Bild' sieht aus, wenn Ihre printit – Anonymous