Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

World's Smallest Gif

by turnstep (Parson)
on Apr 19, 2000 at 01:27 UTC ( #7974=snippet: print w/ replies, xml ) Need Help??

Description: This is a perl script that outputs a very small, hand-crafted GIF. This was written byte-by-byte, and is as small as it comes. Total size: 35 bytes (43 bytes if transparent). More notes in the code and below it.
{
## tinygif
## World's Smallest Gif
## 35 bytes, 43 if transparent

use strict;
my($RED,$GREEN,$BLUE,$GHOST,$CGI);

## Adjust the colors here, from 0-255
$RED   = 255;
$GREEN = 0;
$BLUE  = 0;

## Set $GHOST to 1 for a transparent gif, 0 for normal
$GHOST = 0;

## Set $CGI to 1 if writing to a web browser, 0 if not
$CGI = 0;

$CGI && printf "Content-Length: %d\nContent-Type: image/gif\n\n", 
  $GHOST?43:35;
printf "GIF89a\1\0\1\0%c\0\0%c%c%c\0\0\0%s,\0\0\0\0\1\0\1\0\0%c%c%c\1\
+0;",
  144,$RED,$GREEN,$BLUE,$GHOST?pack("c8",33,249,4,5,16,0,0,0):"",2,2,4
+;
}
That's it! Some notes:
  • Use it in your cgi script or just output the results to a file to create the GIF: perl tinygif > tinyred.gif
  • If transparent, it does not matter what the colors are set to.
  • This makes a 1 pixel by 1 pixel GIF, which is more useful than it might first appear. Just change the size of it with HTML tags to make some pretty rectangles (great for polls!) i.e.:
    <IMG SRC="tinyred.gif" HEIGHT="100" WIDTH="400">
  • I lied - it can be made *slightly* smaller, but then it breaks the GIF specification, although I have not found a browser yet that has a problem with my 'illegal' one. This one is totally legal.
  • To be really precise, this is the smallest possible GIF that displays an image. Don't ask. :)
Comment on World's Smallest Gif
Download Code
RE: World's Smallest Gif
by turnstep (Parson) on Apr 19, 2000 at 18:47 UTC
    This is also legal in another sense: you can use it without fears of Unisys requiring fees, because it does not use LZW compression. See this slashdot article for more info.
RE: World's Smallest Gif
by Simplicus (Monk) on Apr 20, 2000 at 20:36 UTC
    Very cool. I've always just created a 1*1 pixel gif in an editor and used that, but this is smaller.
    Simplicus
RE: World's Smallest Gif
by providencia (Pilgrim) on Apr 21, 2000 at 19:17 UTC
RE: World's Smallest Gif
by Chris (Novice) on Apr 21, 2000 at 23:54 UTC
    I use this same sort of thing to display images that I store as blobs in a db. basically: print "content-type:image/gif\n\n"; print $blob_data; exit;
Re: World's Smallest Gif
by Dominus (Parson) on Dec 29, 2000 at 11:37 UTC
    The approach I like to use for similar tasks is to generate a PPM image file and then pipe the output to ppmtogif, like this:

    $RED = 255; $GREEN = 0; $BLUE = 0; open STDOUT, "| ppmtogif" or die "open: $!"; # "1 1" means that the image is 1x1 pixel. # "255" means that 255 is the maximum color intensity. print "P3 1 1 255 $RED $GREEN $BLUE\n"; close STDOUT or die "close: $!";
    This may not be as cool, and it has the disadvantage of requiring ppmtogif, but it's also a lot simpler, and it has the tremendous advantage that it's easy to generate images that are bigger than one pixel. For example, the images for this article were generated with this technique, as were these.

      You wrote a raytracer in perl and you yell at people who want to write a gif encoder in perl and you wrote a raytracer in perl and ... *head explodes*

      =) No offense meant, I watched people for 5-6 years insist that perl should have a perl-only way to create a gif. And for 5-6 years I've told them "That is as stupid as writing a ray-tracer in perl, wrong tool, wrong job." Now I've got to come up with a better "stupid" than ray-tracer. Thanks a lot MJD!

      Update: ++ to mjd below, I laughed when he called a guy in a forum a bozo after the guy argued about GIF's at the second PerlCon. =) Hopefully he knows I'm kidding...

      --
      $you = new YOU;
      honk() if $you->love(perl)

        Says extremely:
        You wrote a raytracer in perl and you yell at people who want to write a gif encoder in perl
        I didn't yell at anyone. I was just showing another way to do it.

        "That is as stupid as writing a ray-tracer in perl, wrong tool, wrong job."
        But it is stupid. It was a terrible ray tracer. Perl is too slow to write a good ray tracer.
Re: World's Smallest Gif
by extremely (Priest) on Dec 29, 2000 at 14:39 UTC
    Now, what if I want an animated 1 pixel gif? =)

    --
    $you = new YOU;
    honk() if $you->love(perl)

Re: World's Smallest Gif
by Anonymous Monk on Jun 14, 2002 at 17:13 UTC
    How do you see the gif?

      > How do you see the gif?

      Scale it really big:

      IMG SRC="tiny.gif" WIDTH="500" HEIGHT="20"
      
      :)

Re: World's Smallest Gif
by Anonymous Monk on Jun 24, 2011 at 19:10 UTC
    This worked brilliantly for me, thanks. The pack bit did however cause a warning. After some fooling around I changed:
    pack("c8",33,249,4,5,16,0,0,0)
    to
    pack("C8",33,249,4,5,16,0,0,0)
    and that seemed to do it.

Back to Snippets Section

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: snippet [id://7974]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (5)
As of 2014-07-23 04:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite superfluous repetitious redundant duplicative phrase is:









    Results (133 votes), past polls