A while ago Think Geek released a poster featuring the Linux mascot Tux, composed of the Linux source code coloured to make up the picture. The description on the page said it was all done in Perl, producing a whopping great PostScript file and I thought to myself "Hmmm, I can do that". So here it is, the shameless rip off it is, a script that takes an image of your choice and some text of your choice and makes a whopping great PostScript file out of them.

Download and install

UNIX (or similar) users should download shanty-3.tar.gz, uncompress then run make install to install Shanty to /usr/local/bin/. Jorge Salamero Sanz has created a Debian package and has kindly ’manified’ the help file, which I’ll include in future releases.

Windows users should download, unzip the contents and copy the files to "somewhere sensible". If you have trouble reading the text files in Notepad try Wordpad.

All users will need Perl and the GD library installed. Previous users may wish to read the changelog.

How to use

The most common form is:

shanty -i image_file -t text_file -o output_file

The full form is:

shanty -i image_file [-t text_file] [-o output_file] [-s paper_size] [-d density]
  [-m margin] [-b background_colour [-x padding] [-n title] [-l orientation]
  [-rtl] [-btt] [-f font_name] [-altgd]

Windows users should use perl instead of just shanty.

Switch descriptions

The following table describes each of the Shanty command line switches. Note that in most cases there are multiple ways of specifying the same thing, e.g. -i and -image are synonymous.

Values which contain spaces should be surrounded by double quotes.



-i file
-image file

Name of the image to load in. JPG and PNG images are supported. This is the only compulsory field.

-t file
-text file

Name of the text file to load in, if omitted STDIN is used. STDIN is usually the keyboard.

-o file
-output file

Name of the PostScript file to produce, if omitted STDOUT is used. STDOUT is usually the screen.

-s key
-size key

Size of the paper to work with. This field should be one of: a0, a1, a2, a3, a4, a5, a6, letter, broadsheet, ledger, tabloid, legal, executive and 36x36. Default is "a4".

-d num
-density num

Density of the text. Higher numbers are more dense, default is 1.4.

-m length
-margin length

The margins of the page in cm. Default is 1.

-b R,G,B
-background R,G,B

The colour of a backing rectangle to place behind the text. Colours are specified as "R,G,B" with each value between 0 and 255. "off" means no backing colour. Default is "off".

-x length
-p length
-padding length

The distance in cm that the backing rectangle should extend from each edge of the text. Default is 0.5cm.

-n text
-title text

The title of the output to write as meta-data in the PostScript file. Default is "Shanty output".

-l key
-orientation key

The orientation of the paper, can be "portrait", "landscape" or "auto". Default is "auto".


Switch to right-to-left text.


Switch to bottom-to-top text.

-f name
-font name

Specify font. The font name specified must be visible to the PostScript viewer/distiller. Specifying a font name here does not just make a font magically appear. Default is "Courier-Bold".


If you have problems loading the GD library, try this switch.

Command examples

The following command will use face.jpg as the image to base the output on and message.txt as the text to use. The results will be saved in The paper size will be A4 and the orientation of the page will be decided by Shanty. There will be no backing rectangle.

shanty -i face.jpg -t message.txt -o

This command is the same as the one above except the orientation now will always be landscape, the page margin has been changed from the default to be 5cm, there is a pale green backing rectangle (with a 1cm gap from it to the text) and the PostScript title has been set to "Hello everyone".

shanty -i face.jpg -t message.txt -o -l landscape -m 5
  -b 200,255,200 -x 1 -n "Hello everyone"

Lastly, distilling the output to a PDF is highly recommended, it can reduced the file size down as low as 5% of the PS file (blame my shoddy PS output).


In the true spirit of the original idea, I’ve generated a couple of posters made from the OpenBSD 2.8 logo and (a small fraction of) the source from source from OpenBSD 3.4. Two sizes are available: A4 (74KB) and A2 (270KB). You can also view a close-up (28KB) of one eye.