Rasterific logo


Rasterific is a Haskell rasterization engine (a vectorial renderer) implemented on top of JuicyPixels. Rasterific bases its text rendering on FontyFruity.

Main capability

  • Draw vector graphics to an image.
  • Export graphics to PDF (since 0.6).


The renderer design is based on the Nile / Gezira renderer from the STEP project from the VPRI institute. The interesting thing about this renderer is the conciseness of it’s implementation, providing antialiased rendering in the way.


Change log


* Fix: PDF output with stroke of width 0 (thanks to robx)


* Fix: adding Semigroup instances for GHC 8.4


* Fix: sampling empty image


* Fix: handling infinity/NaN in geometry helpers
* Enhancement: better grandient mesh as texture handling.


* Addition: arc path helper
* Fix: Composition of clip path with transformation.


* Addition: Gradient Mesh!

v0.6.1.1 May 2016

* Fix: GHC 8.0 bound fix

v0.6.1 May 2015

* Fix: Correcting bytestring lower bounds

v0.6 May 2015

* Adding: repeating background pattern texture.
* Added: PDF output without images (for now)

v0.5.2.1 April 2015

* Fixed: non-composability of cached elements
* Fixed: Border size when drawing images was twice too large.

v0.5.2 April 2015

* Enhancement: Added a withGroupOpacity to render elements with
a global opacity.

v0.5.1 March 2015

* Enhancement: Generalizing geometry description, with automatic
conversion, reducing the need of type constructor from Primitive,
and directly filling Path.

v0.5.0.3 February 2015

* Fix: hackage documentation

v0.5.0.2 February 2015
* Removing test-suite as it's dependent of some repository-local files

v0.5.0.1 February 2015
* Fix: adding missing Arbitrary file in the distribution.

v0.5 February 2015

* Breaking Change: Font size is now a newtype in FontyFruity,
propagating the changes.
* Allowing to specify DPI at the top level of the rendering
* Adding: an helper function to retrieve the distance to the
* Changed: font size switched to float.

v0.4.2 February 2015
* Fix: Cubic bezier clipping

v0.4.1 January 2015
* Fix: GHC 7.10 compilation
* Adding: Various lens to access some primitive informations.

v0.4 December 2014

* Breaking change: Changed the original position scheme for
text, allowing to specify baseline or upper left corner

* Tried: Fast forward differencing for cubic bezier, not worth
the hassle
* Enhancement: Further optimized decomposition of all primitives,
less alocated memory.
* Enhancement: After optimizing pixel writing, optimized pixel
reading, yielding non-negligeable speed improvements.
* Added: an "immediate" module to avoid constructing
a scene tree.
* Enhancement: Allowing both IO & (ST s) as drawing monads, enabling
interleaved drawing with io operations.
* Added: a "withPathOrientation" function to orient primitives
on a path (allow to draw curved text)
* Added: toNewXBase transformation to create a new basis given
a X axis vector.
* Added: a PathWalker module, to give access to the lower level
path orientation facility.
* Added: some GHC rules for transformations
* Added: a new text function: 'printTextRanges' to allow
easier complex text rendering

v0.3 June 2014

* Enhancement: Switching main free monad type to the church encoded one.
* Enhancement: Optimized the bezier decomposition, strictness annotations
made wonders. May require forward differencing in the future.
* Enhancement: Implementing specific decomposition for lines.
* Enhancement: Reworked texture system, now allowing some specialized
filler (hoping faster computation). For now only the
solid color has been optimized, and all the transformed
* Enhancement: Fixing space leak in combineEdgeSamples, avoiding
many allocations.
* Adding: bounding box calculation facility.
* Adding: Exposing outline creation capability
* Adding: a skewX & skewY transformation function.
* Fixing: some numerical stability with the mitter join.

v0.2.1 April 2014

* Fixing: transparency in gradients.
* Fixing: alpha composition on top of translucent

v0.2 April 2014

* Adding: an ellipse helper.
* Adding: a polyline helper.
* Adding: a polygon helper.
* Adding: monoid instance for Drawing.
* Fixing: some stroking bug with cubic bezier curve.
* Fixing: some documentation snippets.
* Adding: a rounded rectangle helper.
* Added: a even-odd filling rule.
* Added: an offset for dashed stroking.
* Added: a transformation module.
* Change: Changed the Transformable typeclass, splitted
it in two.
* Added: a dumping function for the constructed
* Adding: an image texture with bilinear filtering.
* Adding: an image helper.
* Enhancement: Some modest performance gain.

v0.1 February 2014

* Initial version.

comments powered byDisqus