tags:

views:

333

answers:

3

Well I am using the following code to take any old image into a 160x120 thumbnail, the problem is if there is overflow the background is always black. I've been snooping around the PHP docs but none of these functions seem to have any kind of color parameters. Any ideas or pointers would be great!

$original = 'original_image.jpg';
$thumbnail = 'output_thumbnail.jpg';

list($width,$height) = getimagesize($original);
$width_ratio = 160 / $width;
if ($height * $width_ratio <= 120)
{
    $adjusted_width = 160;
    $adjusted_height = $height * $width_ratio;
}
else
{
    $height_ratio = 120 / $height;
    $adjusted_width = $width * $height_ratio;
    $adjusted_height = 120;
}
$image_p = imagecreatetruecolor(160,120);
$image = imagecreatefromjpeg($original);
imagecopyresampled($image_p,$image,ceil((160 - $adjusted_width) / 2),ceil((120 - $adjusted_height) / 2),0,0,ceil($adjusted_width),ceil($adjusted_height),$width,$height);
imagejpeg($image_p,$thumbnail,100);

Also if you're unclear what I mean, take this image and consider that it was originally just red text on a white background

+2  A: 

The imagecreatetruecolor function creates a black canvas.

Use the imagefill function to paint it white...

great_llama
sweet thanks for tip!
Andrew G. Johnson
+1  A: 

Add this before you copy the original into the new:

$white = ImageColorAllocate($image_p, 255, 255, 255); 
ImageFillToBorder($image_p, 0, 0, $white, $white);

EDIT:

Actually, I didn't know about imagefill . . .

$white = imagecolorallocate($image_p, 255, 255, 255); 
imagefill($image_p, 0, 0, $white);
D. Patrick
+1 for good post, but llama beat you to the punch for accepted answer
Andrew G. Johnson
A: 

dont use imagecreatetruecolor instead imagecreate, I think that would solve