PIL Textfeld mit halign

Code-Stücke können hier veröffentlicht werden.
Antworten
Farbflut
User
Beiträge: 10
Registriert: Mittwoch 9. April 2008, 16:50

Freitag 18. April 2008, 22:28

Ein Textfeld mit halign, genau diese Funktion hat mir in PIL noch gefehlt und ich hoffe, nicht nur mir. :lol:

Über Tipps würde ich mich natürlich freuen =)

Code: Alles auswählen


import Image, ImageFont, ImageDraw

def textbox(img_obj,top,left,right,font,color,text,halign="center"):
    from math import floor
    image = ImageDraw.Draw(img_obj)
    maxWidth = right - left
    words = text.split()
    line = ''
    lines = []
    
    while len(words) > 0:
        line_width,line_height = image.textsize('%s %s' % (line,words[0]), font)
        if line_width > maxWidth:
            lines.append(line)
            line = ''
        line = '%s %s' % (line,words[0])
        del words[0]
    
    if line:
        lines.append(line)
        
    height_total = len(lines) * line_height
    i = 0
    for line in lines:
        if halign == "center":
            line_width,line_height = image.textsize(line, font)
            center = floor(maxWidth/2 + left)
            leftStart = center-line_width/2
        elif halign == "right":
            line_width,line_height = image.textsize(line, font)
            leftStart = left+maxWidth-line_width
        else:
            leftStart = left
        
        image.text((leftStart, top + line_height * i), line, font=font, fill=color )
        i += 1
        
    return img_obj



img_obj = Image.open('/bild.jpg')
font_obj = ImageFont.truetype('/fonts/verdana.ttf', 11, encoding="unic")
text = "PIL Textfeld mit halign PIL Textfeld mit halign PIL Textfeld mit halign PIL Textfeld mit halign  "
image = textbox(img_obj,10,10,230,font_obj,"#FFFFFF",text)
image.save('/test.jpg', "JPEG", quality=100, optimize=1 ) 
Antworten