We can use ImageMagick’s internal graphic context stack to manage different styles and operations in Wand. There are total four push functions for context stack.
- push()
- push_clip_path()
- push_defs()
- push_pattern()
push() function is used to grow context stack and pop() is another function and used to restore stack to previous push.
Syntax :
# for push() wand.drawing.push() # for pop() wand.drawing.pop()Parameters : No parameters for push() as well as for pop() function
Example #1:
Python3
from wand.image import Image
from wand.drawing import Drawing
from wand.color import Color
with Drawing() as ctx: ctx.fill_color = Color( 'RED' )
ctx.stroke_color = Color( 'BLACK' )
ctx.push()
ctx.circle(( 50 , 50 ), ( 25 , 25 ))
ctx.pop()
ctx.fill_color = Color( 'YELLOW' )
ctx.stroke_color = Color( 'GREEN' )
ctx.push()
ctx.circle(( 150 , 150 ), ( 125 , 125 ))
ctx.pop()
with Image(width = 200 , height = 200 , background = Color( 'lightgreen' )) as image:
ctx(image)
image.save(filename = "push.png" )
|
Output:
Example #2:
Python3
from wand.color import Color
from wand.image import Image
from wand.drawing import Drawing
from wand.compat import nested
from math import cos, pi, sin
with nested(Color( 'lightblue' ),
Color( 'transparent' ),
Drawing()) as (bg, fg, draw):
draw.stroke_width = 3
draw.fill_color = fg
for degree in range ( 0 , 360 , 15 ):
draw.push() # Grow stack
draw.stroke_color = Color( 'hsl({0}%, 100 %, 50 %)' . format (degree * 100 / 360 ))
t = degree / 180.0 * pi
x = 35 * cos(t) + 50
y = 35 * sin(t) + 50
draw.line(( 50 , 50 ), (x, y))
draw.pop() # Restore stack
with Image(width = 100 , height = 100 , background = Color( 'green' )) as img:
draw(img)
img.save(filename = "pushpop.png" )
|
Output:
Article Tags :