CompUSA has been selling for years the Seiko Smart Label Printer family (models 100, 200 and 240) starting at
$99.
They include a nice idiot-proof piece of software for Windows, which becomes totally useless when you need to automate this printer in a production environment. Linux is (of course) not supported by Seiko, but Mike Spooner developed an application called SLAP, a UNIX application that prints on the Smart Label printer.

SLAP offers a number of fonts to choose from, but unfortunately it only prints text at the moment. Looking at the C code I found a dead function (I do not think it is enabled in the configuration) that prints a box around the label. The function is called boxit.

Despite my limited C skills, I managed to transform this code into a small loop that reads a bitmap from an ASCII file. If I did not suck this bad at C, I could have managed to make a nice JPG importing routine or something more human, but I also had to resolve this quickly. In addition to this modification to the C code, I wrote an even dirtier perl script that transforms a TIF image into this lazy ACII bitmap format.

At the end, all I needed to do was to print a logo on the label. But I guess you can also use this to print images on the fly.

SLAP is available here

This is the new "boxit" function. It reads the bitmap data from a file called "logo.plot":
static VOID boxit(MBITMAP *bm)
{
USHORT row, col, Counter;

FILE * pFile;
long lSize;
char * buffer;

pFile = fopen ( "logo.plot" , "rb" );
if (pFile==NULL) exit (1);

fseek (pFile , 0 , SEEK_END);
lSize = (ftell (pFile))/8;
rewind (pFile);

buffer = (char*) malloc (lSize);
if (buffer == NULL) exit (2);

for (Counter = 1; Counter < lSize; Counter++) {
fread (buffer,4,1,pFile);
col = atoi(buffer);
fread (buffer,4,1,pFile);
row = atoi(buffer);
mbm_setb(bm, row, col);
}

fclose (pFile);
free (buffer);
}



The Perl script (convert.pl) expects a 380-pixel wide 1-bit TIF image (named logo.tif) and produces a file (logo.plot) wiith a series of 2-digit XY coordinates representing the dots to be plotted.

I use a Smart Label 200 model. I have no idea how many pixels wide are the other two models, but I guess you can find out easily and replace the "380" with your right number.

Here is the perl code. Beware! This code makes sense for me and nobody else, but it works ; - ) 
#!/usr/bin/perl
open(F, "<logo .tif") or die "Unable to open file";
open(FF, ">logo.plot") or die "Unable to open file";
my $buf; my $li, my $co; my $cha; my $cou;
$li=1; $co=1;
sysread(F, $buf, 8 );
while (sysread(F, $buf, 1)) {
$li++;
if ($li>380) { $li=1 ; $co++ ; }
$cha="X".ord($buf)."X";
if ($cha eq "X0X") { print FF sprintf("%04d%04d", $li, $co);}
if ($cha ne "X0X" && $cha ne "X1X" ) { exit; }
}
close(F);


All knowledge and software published in this website is released under the GNU General Public License (GPL)