This is set up so that ppmtosix can be easily bundled as part of the ppm
utilities.
Copy ppmtosix.1 to the appropriate man directory (e.g. /usr/man/man1).
The man page is fairly explicit about the operation and limitations of ppmtosix
and I won't repeat it here. I will point out, however, that my LJ250 printer
does not really match my screen colors very well, even with the same RGB
values. I guess I could make up my own color map, but you'd think that
following the DEC recommended color map would do the trick....
Suggestions are welcome.
-------- CUT HERE FOR PPMTOSIX.1 --------
.TH ppmtosix 1 "26 April 1991"
.SH NAME
ppmtosix - convert a portable pixmap into a sixel format
.SH SYNOPSIS
.B ppmtosix
.RB [ -raw ] [-margin]
.RI [ ppmfile ]
.SH DESCRIPTION
Reads a portable pixmap as input. Produces sixel commands (SIX) as output. The output is formatted for color printing (i.e. for a DEC LJ250 color inkjet printer).
.PP
If RGB values from the PPM file do not have maxval=100, the RGB values are rescaled. A printer control header and a color assignment table begin the SIX file. Image data is written in a compressed format by default. A printer control footer ends the image file.
.SH OPTIONS
.TP
.B -raw
If specified, each pixel will be explicitly described in the image file. If
.RB -raw
is not specified, output will default to compressed format in which identical adjacent pixels are replaced by "repeat pixel" commands. A raw file is often an order of magnitude larger than a compressed file and prints much slower. Abbreviation as
.RB -r
is allowed.
.TP
.B -margin
If
.RB -margin
is not specified, the image will be start at the left margin (of the window, paper, or whatever). If
.RB -margin
is specified, a 1.5 inch left margin will offset the image. Abbreviation as
.RB -m
is allowed.
.SH EXAMPLE
To convert the file "dot.xwd" from xwd to a sixel file called "dot.six", one could specify
.IP
xwdtopnm dot.xwd | ppmtosix > dot.six
.SH PRINTING
Generally, sixel files must reach the printer unfiltered. Use the lpr -x option or cat filename > /dev/tty0?.
.SH BUGS
Upon rescaling, truncation of the least significant bits of RGB values may result in
poor color conversion. If the original PPM maxval was greater than 100, rescaling also reduces the image depth. While the actual RGB values from the ppm file are more or less retained, the color palette of the LJ250 may not match the colors on your screen. This seems to be a printer limitation.
.SH "SEE ALSO"
ppm(5)
.SH AUTHOR
Copyright (C) 1991 by Rick Vinci.
Uses code from Jef Poskanzer's PBMPlus utilities.
.\" Permission to use, copy, modify, and distribute this software and its
.\" documentation for any purpose and without fee is hereby granted, provided
.\" that the above copyright notice appear in all copies and that both that
.\" copyright notice and this permission notice appear in supporting
.\" documentation. This software is provided "as is" without express or
.\" implied warranty.
-------- CUT HERE FOR PPMTOSIX.C --------
/* ppmtosix.c - read a portable pixmap and produce a color sixel file
**
** Copyright (C) 1991 by Rick Vinci.
**
** Uses code from Jef Poskanzer's PBMPlus utilities.
**
** Permission to use, copy, modify, and distribute this software and its
** documentation for any purpose and without fee is hereby granted, provided
** that the above copyright notice appear in all copies and that both that
** copyright notice and this permission notice appear in supporting
** documentation. This software is provided "as is" without express or
** implied warranty.
**
*/
#include "ppm.h"
#include "ppmcmap.h"
#define MAXCOLORS 256
#define DCS '\x90' /* Device Control String */
#define ST '\x9c' /* String Terminator */
#define CSI '\x9b' /* Control String Introducer */