PIL绘制不同颜色文本
你好,想要画出三种不同的文本,每种文本有不同的选项,比如:
- 文本内容是“text-number-1”,字体用的是arial,颜色是红色。
- 文本内容是“text-number-2”,字体用的是veranda,颜色是蓝色,大小是30。
- 文本内容是“text-number-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'>");
3 个回答
3
简单地这样做
# 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)
5
使用十六进制值来表示颜色,方法如下:
draw.text((margin, offset), line, font=font, fill="#000")
24
“fill”这个参数应该是一个包含4个数字的元组,因为你使用的是RGBA颜色模式。
如果你想要不透明的红色:
draw.text((margin, offset), line, font=font, fill=(255,0,0,255) )