Samantha
09-Feb-2004 11:14
This function is a godsend! It works exactly as documented.
I'm
working on an application where I need to take a transparent GIF, matte the
GIF on a user defined background color, and finally scale the GIF based on
a user defined %.
The only way I could get this to work so that the
final image was high quality, ie: no jagged edges, and a smooth scale, was
to convert the GIF to a JPG, and then copy the JPG into a new GIF image
like this:
// open transparent gif
$GIFimg =
imagecreatefromgif($file_path);
// create jpg image
$JPGimg =
imagecreatetruecolor($width, $height);
// copy GIF to
JPG
imagecopy($JPGimg, $GIFimg, 0, 0, 0, 0, $width, $height);
//
create a true color image
$JPGscaled = imagecreatetruecolor($n_width,
$n_height);
// scale the new JPG using the truecolor
image
imagecopyresampled($JPGscaled, $JPGimg, 0, 0, 0, 0, $new_width,
$new_height, $width, $height);
// create final GIF
image
$GIFfinal = imagecreate($n_width, $n_height);
// copy the
scaled JPG back to a GIF
imagecopymerge($GIFfinal, $JPGscaled, 0, 0, 0,
0, $n_width, $n_height, 100);
This worked great except the final
step, copying the JPG to a GIF. If the JPG had too many colors, the
function would index the colors to make it a palette image. So what would
end up happening is the final image contained INCORRECT
colors.
Adding this one line at the bottom of the code fixed
everything.
imagecolormatch($JPGscaled, $GIFfinal);
I hope
this helps anyone who is converting images back and forth and dealing with
palette issues and color correction. Also, be aware that the above code is
a sample and will not work by copying and pasting.