logo

Icodi - Deterministic Random SVG Icon Generator

Gem Version Build Status Maintainability


Generate repeatable random SVG icons from any string, similar to GitHub identicons.


Table of Contents

Installation

$ gem install icodi

Examples

Grid: 5x5, Mirror: X (default settings)

strip1

Grid: 6x6, Mirror: Y, Stroke: 4

strip2

Grid: 8x8, Stroke: 7, Density: 0.3

strip3

Grid: 7x7, Mirror: X/Y, Stroke: 3, Density: 0.8

strip4

Grid: 5x5, Jitter: 0.9, Stroke: 2

strip4

Increasing Stroke: 0.1 - 5.0

strip5

Increasing Density: 0.3 - 0.8

strip6

Increasing Jitter: 0 - 1.0

strip6

Mirror Styles: X, Y, Both, None

strip7

Usage

This is the general usage pattern:

require 'icodi'

# initialize with optional text and options
icon = Icodi.new text, options

# get the SVG string
icon.render

# or save to SVG file
icon.save 'logo'

Generate a random icon with the default options, and save it to icon.svg:

icon = Icodi.new
icon.save 'icon'

Generate persistent random icon (same input generates the same output):

icon = Icodi.new "any string"
icon.save 'icon'

Options

Options can be provided as the first or second argument:

Icodi.new "any string", pixels: 8, density: 0.3
Icodi.new pixels: 8, density: 0.3, stroke: 2
Parameter Default Type Description
pixels 5 Integer Grid size.
mirror :x Symbol Mirroring mode: :x, :y, :both or :none.
color Deterministic Random String A color string for the pixels.
density 0.5 Float A value between 0 and 1 representing the chance for a pixel to be drawn. Lower values mean less pixels.
stroke 0.1 Float Width of the border around each pixel. Note that each pixel is a 10x10 box, so a stroke of 1 means it will take 10% of the box. Higher values generate more overlap between the pixels.
jitter 0 Float A value between 0 and 1 representing the chance for a pixel to be dislocated by half of its size in a random direction.
background #fff String A named SVG color string (blue, yellow etc.) or RGB color (for example #dddddd).
template :default Symbol/String SVG template to use. Can be :default, :html or a path to a file. Read more on Victor SVG Templates.

Using with Sinatra

To create a Sinatra server that serves Icodi images, see the server.rb example code.