http://www.perlmonks.org?node_id=146130


in reply to On-demand single-pixel GIFs

I worked out a slighlty modified version of the great and really useful code above. I added support for 3 hex colors and changed default behavior to exit if no $rgb is matched.
use strict; my($rgb) = $ENV{PATH_INFO} =~ m|/([0-9A-F]+)(?:\.gif)?$|i; grep {length $rgb == $_} (3, 6) || exit; $rgb = join '', map { $_ x 2 } $rgb =~ /./g if length( $rgb ) == 3; my $gif = pack("H*", '47494638396101000100B30000' . $rgb . 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF' . 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF' . 'FFFFFFFFFFFFFFFFFFFFFFFFFF2C0000' . '0000010001000004021044003B' ); binmode(STDOUT); print "Content-type: image/gif\r\n"; print "Content-length: ", length($gif), "\r\n"; print "\r\n"; print $gif;
$|=$_='1g2i1u1l2i4e2n0k',map{print"\7",chop;select$,,$,,$,,$_/7}m{..}g

Replies are listed 'Best First'.
Output a GIF file with Perl, set width, height and color
by true (Pilgrim) on Oct 15, 2002 at 22:49 UTC
    Here's another take on the same idea.
    I often find myself wanting to output
    temporary color spacer gif's for html design
    and layout purposes.
    Adjust the width, height and color of
    a gif file and output without an image module (ie ImageMagick, GD).
    #!/usr/bin/perl -w # this script outputs a gif # set color, width, and height use strict; &printGIF("0000FF","33","10"); ###################################### sub printGIF{ my $color = $_[0]; my $WH = sprintf("%lX",$_[1]); my $HH = sprintf("%lX",$_[2]); $color =~ s/(..)(..)(..)/$1\|$2\|$3/; my($RH,$GH,$BH)=split(/\|/,$color); print STDOUT "Content-type:image/gif\n\n"; my @gif=( "47", "49", "46", "38", "37", "61", "$WH", "00", "$HH", "00", "A1", "01", "00", "$RH", "$GH", "$BH", "FF", "FF", "FF", "00", "00", "00", "00", "00", "00", "21", "F9", "04", "05", "00", "00", "01", "00", "2C", "00", "00", "00", "00", "$WH", "00", "$HH", "00", "40", "02", "$HH", "84", "8F", "A9", "CB", "ED", "0F", "A3", "9C", "B4", "DA", "8B", "B3", "DE", "9C", "17", "00", "3B" ); binmode (STDOUT); # if needed foreach my $bit(@gif){ my $bita = hex($bit); $bita = pack("C",$bita); print STDOUT $bita; } }#################################### end printGIF
    jtrue