Kevin Goodsell wrote: > Third, only in relatively bad cases will GIF require a byte for every > pixel. For example, I just created a solid white 200 by 200 image. > That's 40,000 pixels. The file size is 345 bytes. One byte per pixel is > what you would get if no compression was used at all (probably what > happened in this case, but not what happens in general), or if the > compression performed so badly that it might as well have not been used > (which is rare for typical images). > > -Kevin
Thanks again for the correction. It has spurred some new exploration. I've been looking at the published standard on the format, and it is not at all like I had assumed. I'm afraid I was lumping it in with BMP and TIFF. Anyway, I am starting to untangle the coding: Greetings! E:\d_drive\perlStuff>perl -w open IN, 'fullhead.gif'; binmode IN; local $/; my $img = <IN>; my @bytes = split //, $img; my $gif_type; for (1..6) { $gif_type .= shift @bytes; } print "$gif_type\n"; my $width = ord(shift @bytes); $width += 256 * ord(shift @bytes); my $height = ord(shift @bytes); $height += 256 * ord(shift @bytes); print "Width: $width Height: $height\n"; my $control_string = ord (shift @bytes); my $is_map = $control_string / 128; $control_string %= 128; my $bit_resolution = int(($control_string / 16) + 1); $control_string %= 16; $control_string %= 2; my $bits_per_pixel = $control_string; my $background_color = ord(shift @bytes); print "Background is $background_color\n"; my $color_map = ord(shift @bytes); print "Color map is $color_map\n"; my @colors; for (my $i = 0; $i < 2 ** $bit_resolution; $i++) { my $color_channels = {}; $color_channels->{'red'} = ord(shift @bytes); $color_channels->{'green'} = ord(shift @bytes); $color_channels->{'blue'} = ord(shift @bytes); push @colors, $color_channels; print 'R: ', sprintf ("%03d", $color_channels->{'red'}), ' G: ', sprintf ("%03d", $color_channels->{'green'}), ' B: ', sprintf ("%03d", $color_channels->{'blue'}), "\n"; } foreach my $char (@bytes) { my $byte = ord($char); my $first_nibble = int($byte / 16); my $crumbs = $byte % 16; print "$first_nibble\n$crumbs\n"; } print 'Data size was ', my $byte_size = @bytes, "\n"; ^Z GIF89a Width: 30 Height: 16 Background is 0 Color map is 0 R: 000 G: 000 B: 000 R: 128 G: 000 B: 000 ... 2 1 15 9 0 4 0 1 0 0 ... 3 11 Data size was 117 Right now, I'm sort of tracking as I read the spec. I swear to Gawd, I couldn't find anything like this last time I went a-hunting! It's not very often that you'll see me writing this much flush-left scrit, but right now I just want to follow a file through sequentially, and deal with each part as it comes. Joseph -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>