Primitive Pictures

14 Nov 2017


Take an input image like this:

Input for the
primitive program.

Create 100 rotated ellipses and store every 5th frame as a Portable Network Graphics (PNG) file:

./primitive -i invplace.png -o rotatedellipse_%03d.png -nth 5 -n 100 -m 7 -v

Animated GIFs

Use those PNG files to create an animated GIF (Graphics Interchange Format):

Using a hundred
rotated elipses.

convert -delay 1 -loop 0 rotatedellipse_???.png invplace_rotatedellipse.gif

Or use another mode (e.g. polygon):

Using a hundred

Use more primitives

Using a
thousand rotated elipses.

Using a thousand

Software used

You can find the source code for the primitive executable (written in Go) on GitHub. There is also a version for macOS. The convert executable is part of ImageMagick.

Have fun with your own images and all the options:

./primitive -h
Usage of ./primitive:
  -a int
        alpha value (default 128)
  -bg string
        background color (hex)
  -i string
        input image path
  -j int
        number of parallel workers (default uses all cores)
  -m int
        0=combo 1=triangle 2=rect 3=ellipse 4=circle 5=rotatedrect 6=beziers 7=rotatedellipse 8=polygon (default 1)
  -n value
        number of primitives
  -nth int
        save every Nth frame (put "%d" in path) (default 1)
  -o value
        output image path
  -r int
        resize large input images to this size (default 256)
  -rep int
        add N extra shapes per iteration with reduced search
  -s int
        output image size (default 1024)
  -v    verbose
        very verbose