


  

  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  



  

    

      

        
../index.html[ImageMagick] 
        

        
http://www.imagemagick.org/[sponsor] 
        

        
../index.html 
        
../index.html 
      

    

  


  

  


    

      

      
#mainSkip to page contents 

      
[
      
../index.htmlAbout ImageMagick       
../www/command-line-tools.htmlCommand-line Tools       
../www/api.htmlProgram Interfaces   
][
      
../www/install-source.htmlInstall from Source       
../www/binary-releases.htmlBinary Releases       
../www/resources.htmlResources   
][
      
../www/download.htmlDownload   
][
      
../www/links.htmlLinks   
][
      
../www/sponsors.htmlSponsors   
http://www.thebest3d.com/dogwaffleProject Dogwaffle digital image paint andanimation software       
]
      


      

[ #introIntroduction to Vector Graphics  | #overviewMVG Overview  | #primitivesDrawing Primitives ]
  
Introduction to Vector Graphics
This specification defines the features and syntax for Magick Vector Graphics (MVG), a modularized language for describing two-dimensional vector and mixed vector/raster graphics in ImageMagick.  You can use the language to draw from the
command line, from an MVG file, from an 
http://www.w3.org/TR/SVG/SVG -- Scalable Vector Graphics  file or from one of the ImageMagick ../www/api.htmlprogram interfaces .  Use this command, for example, to render an arc:
 convert -size 100x60 xc:skyblue -fill white -stroke black \
    -draw "path 'M 30,40  A 30,20  20  0,0 70,20 A 30,20  20  1,0 30,40 Z '" \
    arc.png
and here is the results:
  
../images/arc.pngarc 
When the drawing gets sufficiently complex, we recommend you assemble the graphic primitives into a MVG file. For our example, we use ../www/source/piechart.mvgpiechart.mvg  to render a pie chart with this command:
   convert piechart.mvg piechart.png
which produces this rendering:
  
../images/piechart.pngpiechart 
However, in general, MVG is sufficiently difficult to work with that you probably want to use a program to generate your graphics in the SVG format.  ImageMagick automatically converts SVG to MVG and renders your image, for example, we render ../www/source/piechart.svgpiechart.svg  with this command:
   convert piechart.svg piechart.jpg
to produce the same pie chart we created with the the MVG language.
Drawing is available from many of the ImageMagick ../www/api.htmlprogram interfaces  as well.  ImageMagick converts the drawing API calls to MVG and renders it.  Here is example code written in the ../www/magick-wand.htmlMagickWand  language:
   (void) PushDrawingWand(draw_wand);
   {
     const PointInfo points[6] =
     {
       { 180,504 },
       { 282.7,578.6 },
       { 243.5,699.4 },
       { 116.5,699.4 },
       { 77.26,578.6 },
       { 180,504 }
     };
     DrawSetStrokeAntialias(draw_wand,True);
     DrawSetStrokeWidth(draw_wand,9);
     DrawSetStrokeLineCap(draw_wand,RoundCap);
     DrawSetStrokeLineJoin(draw_wand,RoundJoin);
     (void) DrawSetStrokeDashArray(draw_wand,0,(const double *)NULL);
     (void) PixelSetColor(color,"#4000c2");
     DrawSetStrokeColor(draw_wand,color);
     DrawSetFillRule(draw_wand,EvenOddRule);
     (void) PixelSetColor(color,"#800000");
     DrawSetFillColor(draw_wand,color);
     DrawPolygon(draw_wand,6,points);
   }
   (void) PopDrawingWand(draw_wand);
  
MVG Overview
MVG ignores all white-space between commands. This allows multiple MVG commands per line. It is common convention to terminate each MVG command with a new line to make MVG easier to edit and read. This syntax description uses indentation in MVG sequences to aid with understanding. Indentation is supported but is not required.
Metafile wrapper syntax (to support stand-alone MVG files):
  push graphic-context
    viewbox 0 0 width height
    [ any other MVG commands ]
  pop graphic-context
Pattern syntax (saving and restoring context):
  push pattern id x,y width,height
   push graphic-context
    [ drawing commands ]
   pop graphic-context
  pop pattern
an example is (%s is a identifier string):
  push defs
   push pattern %s 10,10 20,20
    push graphic-context
     fill red
     rectangle 5,5 15,15
    pop graphic-context
    push graphic-context
     fill green
     rectangle 10,10 20,20
    pop graphic-context
   pop pattern
  pop defs
For image tiling use:
  push pattern id x,y width,height
   image Copy ...
  pop pattern
Note you can use the pattern for either the fill or stroke like:
  stroke url(#%s)
or
  fill url(#%s)
The clip path defines a clipping area, where only the contained area to be drawn upon.  Areas outside of the clipping area are masked.
  push defs
   push clip-path %s
    push graphic-context
     rectangle 10,10 20,20
    pop graphic-context
   pop clip-path
  pop defs
  clip-path url(#%s)
  
Drawing Primitives
Here is a complete description of the MVG drawing primitives:
  
affine sx,rx,ry,sy,tx,ty
  
arc x0,y0   x1,y1   a0,a1
  
bezier x0,y0 ... xn,yn
  
circle originx,originy   perimeterx,perimetery
  
clip-path url(name)
  
clip-rule rule
Choose from these rule types:
  evenodd
  nonzero
  
clip-units units
Choose from these unit types:
  userSpace
  userSpaceOnUse
  objectBoundingBox
  
color x,y method
Choose from these method types:
  point
  replace
  floodfill
  filltoborder
  reset
  
decorate type
Choose from these types of decorations:
  none
  line-through
  overline
  underline
  
ellipse centerx,centery   radiusx,radiusy   arcstart,arcstop
  
fill color
Choose from any of these ../www/color.htmlcolors .
  
fill-opacity opacity
The opacity ranges from 0.0 (fully opaque) to 1.0 (fully transparent) or as a percentage (e.g. 50%).
  
fill-rule rule
Choose from these rule types:
  evenodd
  nonzero
  
font name
  
font-family family
  
font-size point-size
  
font-stretch type
Choose from these stretch types:
  all
  normal
  ultra-condensed
  extra-condensed
  condensed
  semi-condensed
  semi-expanded
  expanded
  extra-expanded
  ultra-expanded
  
font-style style
Choose from these styles:
  all
  normal
  italic
  oblique
  
font-weight weight
Choose from these weights:
  all
  normal
  bold
  100
  200
  300
  400
  500
  600
  700
  800
  900
  
gradient-units units
Choose from these units:
  userSpace
  userSpaceOnUse
  objectBoundingBox
  
gravity type
Choose from these gravity types:
  NorthWest
  North
  NorthEast
  West
  Center
  East
  SouthWest
  South
  SouthEast
  
image compose x,y width,height 'filename'
Choose from these compose operations:
  Add
  Atop
  Bumpmap
  Clear
  CopyBlue
  CopyGreen
  CopyOpacity
  CopyRed
  Copy
  Difference
  In
  Minus
  Multiply
  Out
  Over
  Plus
  Subtract
  Xor
  
line x,y x1,y1
  
font-style x,y method
Choose from these methods:
  point
  replace
  floodfill
  filltoborder
  reset
  
offset offset
  
opacity opacity
Use percent (e.g. 50%).
  
path path
  
point x,y
  
polygon x,y x1,y1, ..., xn,yn
  
polyline x,y x1,y1, ..., xn,yn
  
pop clip-path
  
pop defs
  
pop gradient
  
pop graphic-context
  
pop pattern
  
push clip-path name
  
push defs
  
push gradient id linear x,y x1,y1
  
push gradient id radial xc,cy xf,yf radius
  
push graphic-context
  
push pattern id radial x,y width,height
  
rectangle x,y x1,y1
  
rotate angle
  
roundrectangle x,y x1,y1 width,height
  
scale x,y
  
skewX angle
  
skewX angle
  
stop-color color offset
  
stroke color
  
stroke-antialias 0 | 1
  
stroke-dasharray none | numeric-list
  
stroke-dashoffset offset
  
stroke-linecap type
Choose from these cap types:
  butt
  round
  square
  
stroke-linejoin type
Choose from these join types:
  bevel
  miter
  round
  
stroke-miterlimit limit
  
stroke-opacity opacity
  
stroke-width width
  
text "text"
  
text-antialias 0 | 1
  
text-undercolor color
  
translate x,y
  
viewbox x,y x1,y1
      

      
 
    

  

  

  

    
http://redux.imagemagick.org/discussion-serverDiscourse Server  |
    
../www/mailing-list.htmlMailing Lists  |
    
http://redux.imagemagick.org/galleryImage Gallery  |
    
http://redux.imagemagick.org/MagickStudio/scripts/MagickStudio.cgiImageMagick Studio 
  

  

    
© 1999-2005 ImageMagick Studio LLC
  

  



