2013-02-22 4 views
2

Привет нарисовать три различных текста с различными опциями для Ex:пиль текст Жеребьевка с различными цветами

  1. текст-номер-1, шрифт = Arial, цвет = красный
  2. текст-номер-2, шрифт = веранда, цвет = синий, размер = 30
  3. текст-номер-3, шрифт = Tahoma, цвет = зеленый, размер = 40, выровняйте = центр

текст должен идти в новых линиях.

def pil_image(request): 
text = request.GET.get('text', None) 
font = str(request.GET.get('font', 'arial')) 
fontsize = int(request.GET.get('fontsize', '20')) 
textcolor = str(request.GET.get('textcolor', '000')) 

import Image, ImageDraw, ImageFont, textwrap 

img = Image.open('media/text/transparent.png') 
img = img.convert("RGBA") 
datas = img.getdata() 
w, h = img.size 

newData = [] 
for item in datas: 
    if item[0] == 255 and item[1] == 255 and item[2] == 255: 
     newData.append((255, 255, 255, 0)) 
    else: 
     newData.append(item) 

img.putdata(newData) 

draw = ImageDraw.Draw(img) 
font = ImageFont.truetype("media/text/fonts/" + font + ".ttf", fontsize, encoding="unic") 


margin = offset = 40 
for line in textwrap.wrap(text, width=48): 
    w, h = draw.textsize(line) 
    draw.text((margin, offset), line, font=font, fill='#'+textcolor) 
    offset += font.getsize(line)[1] 

del draw 

img.save("media/text/custom.png", "PNG") 

return HttpResponse("<img src='/media/text/custom.png'>"); 
+0

Вы должны предоставить пример того, что вы уже пробовали или, по крайней мере, концептуально, что вы с пониманием проблемы или решения. SO здесь не для того, чтобы выполнять задания для вас. –

+0

добавлен код, который я использую сейчас –

ответ

6

Параметр «fill» должен быть кортежем с 4 номером, так как вы используете цветовой код RGBA.

Для непрозрачный красный:

draw.text((margin, offset), line, font=font, fill=(255,0,0,255)) 
+0

Я использую коды HEX для цветов. –

+0

Я пробовал fill = "red" или fill = "# ff0000", оба работают. – MatthieuW

0

просто сделать это

# thicker border 
draw.text((x-1, y-1), text, font=font, fill=shadowcolor) 
draw.text((x+1, y-1), text, font=font, fill=shadowcolor) 
draw.text((x-1, y+1), text, font=font, fill=shadowcolor) 
draw.text((x+1, y+1), text, font=font, fill=shadowcolor) 
Смежные вопросы