Category: | HTML Utility |
Author/Contact Info | bastard |
Description: | I hacked this thing together during my quest to get around the "no images on the home node under level 5" rule. (yes i know there are other ways)
I'm not sure how useful it is, but since someone requested it i'll post it here in case anyone else is interested. (I suppose the code could also provide a simple example of the use of the GD image module.)
What does it do you may ask? Basically it converts an image to a relatively optimized table representation of the image. It accepts one parameter which is the image file you are going to convert. It dumps the table to STDOUT. It can accept the following image types: PNG, JPEG, XPM and GD2 Warning, this will create very large and complex tables. I have created a 120k table from 6k PNG image, so this thing is not appropriate for larger images. (before the COLSPAN enhancements it could generate tables many times larger) |
#!/usr/bin/perl -w use strict; use GD; # this lib is so cool my $imagename = shift; # get the user specified image my $image = GD::Image->new($imagename) || die "Could not open image: $ +imagename\n"; # get the image size my ($width, $height) = $image->getBounds(); # build the seed color... my $index = $image->getPixel(0, 0); my ($r,$g,$b) = $image->rgb($index); # now format it as 2 digit hex my $color = sprintf "%02x%02x%02x", $r, $g, $b; my $lastcolor = ""; my $count; # the stylesheet is necessary to make the end result acceptably small my $results = "<STYLE>.sm { font-size: 2px; font-family: sans-serif }< +/STYLE>\n"; $results .= "<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=$width +HEIGHT=$height>"; # loop through the pixels for (my $x = 0; $x < $height; $x++) { $count = 0; $results .= "<TR>"; for (my $y = 0; $y < $width; $y++) { $count++; # get the color of the current pixel $index = $image->getPixel($y, $x); ($r,$g,$b) = $image->rgb($index); $color = sprintf "%02x%02x%02x", $r, $g, $b; # we use this to build a COLSPAN length # this greatly enhances efficiency if ($color ne $lastcolor) { $count = $count * 2; $results .= "<TD CLASS=sm BGCOLOR=\"$lastcolor +\" COLSPAN=$count>_</TD>"; $count = 0; } $lastcolor = $color; } $count = $count * 2; $results .= "<TD CLASS=sm BGCOLOR=\"$lastcolor\" COLSPAN=$coun +t>_</TD>"; $results .= "</TR>\n"; } $results .= "</TABLE>"; print "$results\n"; |
Back to
Code Catacombs