Image

Imagertimmons wrote in Imagephp 😡frustrated

Hey all. I run a photo storage website, and until now, we've been thumbnailing huge amounts of imgaes by hand (using the batch process mode of Paint Shop Pro 8, but it's still a pain). I've developed a PHP code that, in theory, works flawlessly, but it runs into problems.

The code seems to be washing the images out--ruining or offsetting colors. There's certainly nothing in the code that I can find that would cause this.

Any help would be greatly appreciated

a client's file (original and unresized)
the following script's output (no saturation and resized)


<?php

//$tnzise is any integer, userset, that is desired for the output size of the parsed thumbail
//$image is any string, userset, that is the original and unresized image

// check if the 'image' parameter has been given
if (!isset($image)){ // if not generate an error image
$img = ImageCreate(100, 100);
$red = ImageColorAllocate($img, 255, 0, 0);
$yellow = ImageColorAllocate($img, 255, 255, 0);
ImageString($img, 5, 20, 20, "No image", $yellow);
ImageString($img, 5, 20, 40, "name", $yellow);
ImageString($img, 5, 20, 60, "given!", $yellow);
ImagePNG($img);
ImageDestroy($img);
exit();
}

// check if the 'tnsize' parameter has been given
if (!isset($tnsize)) { // if not generate an error image
$img = ImageCreate(100, 100);
$red = ImageColorAllocate($img, 255, 0, 0);
$yellow = ImageColorAllocate($img, 255, 255, 0);
ImageString($img, 5, 20, 20, "No thumb", $yellow);
ImageString($img, 5, 20, 40, "size", $yellow);
ImageString($img, 5, 20, 60, "given!", $yellow);
ImagePNG($img);
ImageDestroy($img);
exit();
}

// ensure that $tnsize is an integer
$tnsize = (integer) $tnsize;
// check that the size asked for is sensible
if (($tnsize<20) or ($tnsize>300)){ // if not generate an error image
$img = ImageCreate(100, 100);
$red = ImageColorAllocate($img, 255, 0, 0);
$yellow = ImageColorAllocate($img, 255, 255, 0);
ImageString($img, 5, 20, 20, "Bad", $yellow);
ImageString($img, 5, 20, 40, "size", $yellow);
ImageString($img, 5, 20, 60, "given!", $yellow);
ImagePNG($img);
ImageDestroy($img);
exit();
}

// attempt to load the big image
if (!$bigimage = @ImageCreateFromJPEG($image)) { // if loading fails
$img = ImageCreate(100, 100); // generate an error
$red = ImageColorAllocate($img, 255, 0, 0); // image
$yellow = ImageColorAllocate($img, 255, 255, 0);
ImageString($img, 5, 20, 20, "Image", $yellow);
ImageString($img, 5, 20, 40, "not", $yellow);
ImageString($img, 5, 20, 60, "found!", $yellow);
ImagePNG($img);
ImageDestroy($img);
exit();
}

// all seems to be OK so start the processing
// create the new image using the tnsize parameter
$tnimage = ImageCreate($tnsize, $tnsize);
// allocate the background colour for the thumbnail
$darkblue = ImageColorAllocate($tnimage, 0, 0, 127);
// set the background as transparent
ImageColorTransparent($tnimage,$darkblue);
// get the parameters of the big image
$sz = GetImageSize($image);
// load our internal variables
$x = $sz[0]; // big image width
$y = $sz[1]; // big image height
// find the larger dimension
if ($x>$y) { // if it is the width then
$dx = 0; // the left side of the new image
$w = $tnsize; // the width of the new image
$h = ($y / $x) * $tnsize; // the height of the new image
$dy = ($tnsize - $h) / 2; // the top of the new image
}else{ // if the height is larger then
$dy = 0; // the top of the new image
$h = $tnsize; // the height of the new image
$w = ($x / $y) * $tnsize; // the width of the new image
$dx = ($tnsize - $w) / 2; // the left edgeof the new image
}

// copy the resized version into the thumbnal image
ImageCopyResized($tnimage, $bigimage, $dx, $dy, 0, 0, $w, $h, $x, $y);
// generate the PNG image
ImagePNG($tnimage);
// release the memory used by the thumbnail image
ImageDestroy($tnimage);
// release the memory used by the original big image
ImageDestroy($bigimage);
// all done!
?>


I have no particular attraction to this code, so if it's beyond repair, I'd be willing to try out a new script if anyone has any that seem to work well.