PIL - ImageDraw - draw.text

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Stellarc
User
Beiträge: 2
Registriert: Dienstag 10. Juni 2008, 10:48

Dienstag 10. Juni 2008, 13:24

Hi!

Gibt es die Möglichkeit mit der Funktion draw.text aus der Python Image Library den Text auch senkrecht darzustellen?

Unter senkrecht verstehe ich, dass man den Text nicht untereinander schreibt. Sondern das der ganze Text einfach um 90° von der X-Achse aus gedreht wird.

Das ImageDraw Modul unterstützt die Funktion draw.text, sie ist wie folgt definiert:
draw.text(postition, string, options)
options: fill und font

Mein momentanes Beispielsscript setzt einfach die Buchstaben untereinander, aber leider dreht es das Textfeld nicht.

Code: Alles auswählen

#!/usr/bin/python2.4 -w

import Image, ImageDraw, ImageFont

def drawImage(filename):
    background = '#FFFFFF'
    black = '#000000'
    width = 200
    height = 200        

    # PIL create an empty image and draw object to draw on
    # memory only, not visible
    image = Image.new("RGB", (width, height), background)
    draw = ImageDraw.Draw(image)

    # use a truetype font
    font_path = "/usr/share/fonts/truetype/"
    sans18 = ImageFont.truetype (font_path+'DejaVuSans-Bold.ttf', 18)
    arial12 = ImageFont.truetype (font_path+'arial.ttf', 12)
    
    # print header
    draw.text((20, 20), "text string", font=sans18, fill=black)    
    
    # extra function needed to draw text vertical
    x = 20
    y = 50 
    spacing = 10
    text = "text string"
    font = arial12
    fill_color = black
    draw = verdraw(draw,x,y,spacing,text,font,fill_color)

    # PIL image can be saved as .png .jpg .gif or .bmp file
    image.save(filename+'.jpg')

    
def verdraw(draw,width,height,spacing,text,fon,color):
    for i in range(0,len(text)):
        draw.text((width,height),text[i], font=fon, fill=color)
        height+=spacing
    return draw


if __name__ == '__main__':
    drawImage("test")


...oder sollte ich zu einer anderen Library als PIL greifen?


Viele Grüße aus Mainz!
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 10. Juni 2008, 14:58

Also wenn es nur um 90° geht, kannst du das Bild auch zweimal rotieren. Einmal um 90°, Text schreiben und dann wieder um -90°, um das Ursprungsbild zu bekommen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Stellarc
User
Beiträge: 2
Registriert: Dienstag 10. Juni 2008, 10:48

Dienstag 10. Juni 2008, 15:12

Danke Leonidas,

ich werde deine Idee versuchen umzusetzen.

...halte euch auf dem Laufenden
Antworten