pil用不同的颜色绘制文本

时间:2013-02-22 14:16:43

标签: python text python-imaging-library draw

您好用ex:

绘制三个不同的文本
  1. text-number-1,font = arial,color = red
  2. text-number-2,font = veranda,color = blue,size = 30
  3. text-number-3,font = tahoma,color = green,size = 40,align = center
  4. 文字必须换行。

    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'>");
    

3 个答案:

答案 0 :(得分:9)

使用RGBA颜色模式时,“fill”参数应该是一个带有4个数字的元组。

对于不透明的红色:

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

答案 1 :(得分:1)

只需这样做

# 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)

答案 2 :(得分:1)

使用十六进制值表示颜色,如下所示:

draw.text((margin, offset), line, font=font, font=font, fill="#000")