Hi, I wrote a little script using GD to "slice and dice" an image and make it a clickable html image map. It all works good, except for some pallette problems, which can be seen here. I've tried using png instead of jpg, and got the same results. A little web searching says to use gif's as your original file format, to get better palettes, but GD dosn't support gif. The problem is that the "truecolor=1" setting gives a faithful copy, but with some bad tiles. Where "truecolor=0" gives uniform results, but somewhat dergaded. Any ideas to solve this?
#!/usr/bin/perl use warnings; use strict; use GD; my @tiles = (); my $file = shift or die "need filename\n"; my $tempname = $file; $tempname =~ s/^(.+)(\.\w+)$/$1/; print "$tempname\n"; #set tile size my $x = 100; my $y = 100; #truecolor with 1 instead of 0, looks better #but some tile pallettes might get screwed up #safer with 0 my $image = GD::Image->newFromJpeg($file,0); my ($width,$height) = $image->getBounds(); print "width->$width height->$height\n"; #$image->trueColorToPalette(); #dosn't help much #you can experiment my $rows = int($height/$y +1) - 1; #make it 0 based my $cols = int($width/$x + 1) - 1; print "rows->$rows cols->$cols\n"; foreach my $row(0..$rows){ foreach my $col(0..$cols){ my $imageout = new GD::Image($x,$y); #$image->copy($sourceImage,$dstX,$dstY, # $srcX,$srcY,$width,$height) $imageout->copy($image,0,0,($col*$y),($row*$x),$x,$y); my $tilename = $tempname .'-'.$row.'-'.$col.'.jpg'; push(@tiles,$tilename); open(OUT, '>', $tilename) or warn $!; print OUT $imageout->jpeg; close OUT; } } ###################################################################### + #make an html page with tiles reassembled and clickable open(HT,">$tempname-jpg.html") or warn $!; print HT "<html><body><h1>$tempname.jpg</h1>"; print HT "<table border=0 cellspacing=0 cellpadding=0>"; #putting border=0 in the IMG<> makes it seamless #I have border=1 for demonstration foreach my $row(0..$rows){ print HT "<tr>"; foreach my $col(0..$cols){ print HT "<td><a href= $tempname-$row-$col.html> <IMG SRC=$tempname-$row-$col.jpg border=1 HEIGHT=$y + WIDTH=$x alt=$tempname-$row-$col.jpg></a></td>" } print HT "</tr>"; } print HT "</table></body></html>";

In reply to pallette problems with GD slicing images by zentara

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.