In [1]:
    
#require "cairo"
    
    
Rendering to a surface
In [2]:
    
let width  = 400
let height = 400
let image() = 
  (* Setup Cairo *)
  let surface = Cairo.image_surface_create Cairo.FORMAT_ARGB32 ~width ~height in
  let ctx = Cairo.create surface in
  (* Set thickness of brush *)
  Cairo.set_line_width ctx 15. ;
  (* Draw out the triangle using absolute coordinates *)
  Cairo.move_to     ctx   200.  100. ;
  Cairo.line_to     ctx   300.  300. ;
  Cairo.rel_line_to ctx (-200.)   0. ;
  Cairo.close_path  ctx ;
  (* Apply the ink *)
  Cairo.stroke ctx ;
  (* Output a PNG file *)
  Cairo_png.surface_write_to_channel surface Iocaml.mime
    
    
In [3]:
    
image();
Iocaml.send_mime ~base64:true "image/png"
    
    
    
Rendering to SVG
In [4]:
    
let svg() = 
  (* Setup Cairo *)
  let surface = Cairo_svg.surface_create_for_channel Iocaml.mime 
      ~width_in_points:(float width) ~height_in_points:(float height) in
  let ctx = Cairo.create surface in
  (* Set thickness of brush *)
  Cairo.set_line_width ctx 15. ;
  (* Draw out the triangle using absolute coordinates *)
  Cairo.move_to     ctx   200.  100. ;
  Cairo.line_to     ctx   300.  300. ;
  Cairo.rel_line_to ctx (-200.)   0. ;
  Cairo.close_path  ctx ;
  (* Apply the ink *)
  Cairo.stroke ctx ;
  (* Output a SVG file *)
  Cairo.surface_finish surface
    
    
In [5]:
    
svg(); Iocaml.send_mime "image/svg+xml";
svg(); Iocaml.send_mime "image/svg+xml"