python wand:用draw.text()改变文本样式

lan*_*ng2 3 python imagemagick wand

我正在用draw.text()画布上画一些文字.但该功能似乎只需要3个参数x,y和body,所以没有办法指定什么字体,颜色等.可能我在这里缺少一些东西,因为这是非常基本的功能.我错过了什么?

emc*_*lle 7

有了wand.drawing.Drawing,您需要构建绘图对象的"上下文".可以通过直接在draw对象实例上设置属性来定义字体样式,族,重量,颜色等等.

from wand.image import Image
from wand.color import Color
from wand.drawing import Drawing
from wand.display import display

with Image(width=200, height=150, background=Color('lightblue')) as canvas:
    with Drawing() as context:
        context.fill_color = Color('orange')
        context.stroke_color = Color('brown')
        context.font_style = 'italic'
        context.font_size = 24
        context.text(x=25,
                     y=75,
                     body="Hello World!")
        context(canvas)
        canvas.format = "png"
        display(canvas)
Run Code Online (Sandbox Code Playgroud)

用wand.draw更改文本样式

但是如果你的draw对象已经有了矢量属性呢?

这是Drawing.push()Drawing.pop()可以用来管理你的绘图堆栈.

 # Default attributes for drawing circles
 context.fill_color = Color('lime')
 context.stroke_color = Color('green')
 context.arc((75, 75), (25, 25), (0, 360))
 # Grow context stack for text style attributes
 context.push()
 context.fill_color = Color('orange')
 context.stroke_color = Color('brown')
 context.font_style = 'italic'
 context.font_size = 24
 context.text(x=25,
             y=75,
             body="Hello World!")
 # Return to previous style attributes
 context.pop()
 context.arc((175, 125), (150, 100), (0, 360))
Run Code Online (Sandbox Code Playgroud)

带有上下文堆栈的文本样式