Text zu Bild?
Hallo,
ich möchte(mit Python) aus einem Text ein 2-demensionales Array mit den Zahlen von 0-255 machen, das dem Bild vom Text entspricht. Im Internet habe ich keine anständigen Antworten gefunden. kann mir da jemand bitte helfen?
zum Beispiel stellt die Liste
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0.17, 0.45, 0.58, 0.59, 0.47, 0.29, 0, 0, 0, 0], [0, 0, 0, 0.65, 1, 1, 1, 1, 1, 1, 0.65, 0, 0, 0], [0, 0, 0.26, 1, 0.67, 0.36, 0.21, 0.22, 0.47, 1, 1, 0.36, 0, 0], [0, 0, 0, 0.21, 0, 0, 0, 0, 0, 0.53, 1, 0.62, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.37, 1, 0.76, 0, 0], [0, 0, 0, 0, 0, 0, 0.04, 0.15, 0.24, 0.5, 1, 0.8, 0, 0], [0, 0, 0, 0.1, 0.51, 0.89, 1, 1, 1, 1, 1, 0.8, 0, 0], [0, 0, 0.1, 0.82, 1, 0.79, 0.46, 0.35, 0.31, 0.6, 1, 0.8, 0, 0], [0, 0, 0.51, 1, 0.67, 0, 0, 0, 0, 0.39, 1, 0.8, 0, 0], [0, 0, 0.75, 1, 0.44, 0, 0, 0, 0, 0.36, 1, 0.81, 0, 0], [0, 0, 0.67, 1, 0.56, 0, 0, 0, 0.27, 0.96, 1, 0.81, 0, 0], [0, 0, 0.35, 1, 1, 0.67, 0.46, 0.68, 1, 0.94, 1, 0.81, 0, 0], [0, 0, 0, 0.38, 0.89, 1, 1, 0.98, 0.6, 0.1, 1, 0.81, 0, 0], [0, 0, 0, 0, 0, 0.14, 0.22, 0, 0, 0, 0.08, 0.06, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]] grafisch ein kleines a dar.
2 Antworten
Mit der Bibliothek PIL kann man Bilder erzeugen, welche man leicht in ein numpy-Array umwandeln kann.
from PIL import Image, ImageDraw
import numpy as np
image = Image.new('L', (64, 10), color="white")
draw = ImageDraw.Draw(image)
draw.text((0, 0), text="Hallo Welt!")
image.show()
np.array(image)
Output:
https://pillow.readthedocs.io/en/stable/reference/ImageDraw.html#PIL.ImageDraw.ImageDraw.text
Für andere Schriftarten muss noch ImageFont importiert werden.
https://pillow.readthedocs.io/en/stable/reference/ImageFont.html
Mit ImageFont.
Obiges Beispiel würde dann so aussehen:
from PIL import Image, ImageDraw, ImageFont
import numpy as np
image = Image.new('L', (128, 20), color="white")
font = ImageFont.truetype(pfad, 20)
draw = ImageDraw.Draw(image)
draw.text((0, 0), text="Hallo Welt!", font=font)
image.show()
np.array(image)
Dabei ist pfad der Pfad, unter dem die Schriftart abgespeichert ist.
Auf Google Colab wäre das z.B.: "/usr/share/fonts/truetype/liberation/LiberationMono-Bold.ttf"
Auf Windows gibt es ein Windows-Ordner und darin einen Fonts-Ornder, wo die Schriftarten abgespeichert sind.
Die Standardschrift kann man nicht einfach nur vergrößern.
aus einem Text ein 2-demensionales Array mit den Zahlen von 0-255 machen, das dem Text entspricht
Das ist eine ziemlich vage Angabe.
Soll es wirklich ein Array sein? Arrays sind keiner der klassischen Python-eigenen Datentypen, auch wenn es sie in Numpy gibt. Üblich sind Listen und Tupel.
Was sind die zwei Dimensionen des "Arrays"? Ein Text ist erstmal eine Zeichenkette, und somit eine Dimension.
Warum nur 0..255 in Zeiten von Unicode?
Vielleicht kannst du ein Beispiel geben.
also ich meine, ich möchte eine Liste erstellen, die das Bild darstellt,
zum Beispiel stellt die Liste
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0.17, 0.45, 0.58, 0.59, 0.47, 0.29, 0, 0, 0, 0], [0, 0, 0, 0.65, 1, 1, 1, 1, 1, 1, 0.65, 0, 0, 0], [0, 0, 0.26, 1, 0.67, 0.36, 0.21, 0.22, 0.47, 1, 1, 0.36, 0, 0], [0, 0, 0, 0.21, 0, 0, 0, 0, 0, 0.53, 1, 0.62, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0.37, 1, 0.76, 0, 0], [0, 0, 0, 0, 0, 0, 0.04, 0.15, 0.24, 0.5, 1, 0.8, 0, 0], [0, 0, 0, 0.1, 0.51, 0.89, 1, 1, 1, 1, 1, 0.8, 0, 0], [0, 0, 0.1, 0.82, 1, 0.79, 0.46, 0.35, 0.31, 0.6, 1, 0.8, 0, 0], [0, 0, 0.51, 1, 0.67, 0, 0, 0, 0, 0.39, 1, 0.8, 0, 0], [0, 0, 0.75, 1, 0.44, 0, 0, 0, 0, 0.36, 1, 0.81, 0, 0], [0, 0, 0.67, 1, 0.56, 0, 0, 0, 0.27, 0.96, 1, 0.81, 0, 0], [0, 0, 0.35, 1, 1, 0.67, 0.46, 0.68, 1, 0.94, 1, 0.81, 0, 0], [0, 0, 0, 0.38, 0.89, 1, 1, 0.98, 0.6, 0.1, 1, 0.81, 0, 0], [0, 0, 0, 0, 0, 0.14, 0.22, 0, 0, 0, 0.08, 0.06, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]] grafisch ein kleines a dar.
Welches Bild? Von einem Bild war noch gar nicht die Rede.
Danke! Aber wie kann ich die Schriftgröße verändern?