13

こんにちは、例の異なるオプションで3つの異なるテキストを描画します:

  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

テキストは改行する必要があります。

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

3 に答える 3

20

RGBAカラーモードを使用するため、「fill」パラメーターは4つの数値を持つタプルである必要があります。

不透明な赤の場合:

draw.text((margin, offset), line, font=font, fill=(255,0,0,255) )
于 2013-02-22T15:00:12.237 に答える
4

次のように、色に 16 進値を使用します。

draw.text((margin, offset), line, font=font, fill="#000")
于 2020-05-08T12:27:09.980 に答える