954,173 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Upload and Resize PNG and GIF images

How would I go about uploading and resizing a transparent PNG, GIF image using PHP? I have a script but it only works with JPG images and of course JPG images do not support transparent images.

The image also needs to maintain it's transparency when resized.

Thanks in Advance!

lonestar23
Light Poster
44 posts since Mar 2008
Reputation Points: 20
Solved Threads: 0
 
<?php
//header ("Content-type: image/jpeg");
/*
JPEG / PNG Image Resizer
Parameters (passed via URL):

img = path / url of jpeg or png image file

percent = if this is defined, image is resized by it's
          value in percent (i.e. 50 to divide by 50 percent)

w = image width

h = image height

constrain = if this is parameter is passed and w and h are set
            to a size value then the size of the resulting image
            is constrained by whichever dimension is smaller

Requires the PHP GD Extension

Outputs the resulting image in JPEG Format

By: Michael John G. Lopez - www.sydel.net
Filename : imgsize.php
*/
//resize('images/phone.jpg','images/phone_thumb.jpg',100);

function uploadpic($file,$thumb_file,$field,$thumb_width=100){
	$result=false;
	if(is_uploaded_file($_FILES[$field]['tmp_name']))
		{
			move_uploaded_file($_FILES[$field]['tmp_name'],$file);
			thumbnail($file,$thumb_file,$thumb_width);
			$result=true;
		}
	return $result;
}


function resize($orig_file,$thumb_file,$prop){
	$img = $orig_file;
	$constrain = true;
	$w = $prop;
	$h = $prop;
	
	// get image size of img
	$x = @getimagesize($img);
	// image width
	$sw = $x[0];
	// image height
	$sh = $x[1];
	
	if ($percent > 0) {
		// calculate resized height and width if percent is defined
		$percent = $percent * 0.01;
		$w = $sw * $percent;
		$h = $sh * $percent;
	} else {
		if (isset ($w) AND !isset ($h)) {
			// autocompute height if only width is set
			$h = (100 / ($sw / $w)) * .01;
			$h = @round ($sh * $h);
		} elseif (isset ($h) AND !isset ($w)) {
			// autocompute width if only height is set
			$w = (100 / ($sh / $h)) * .01;
			$w = @round ($sw * $w);
		} elseif (isset ($h) AND isset ($w) AND isset ($constrain)) {
			// get the smaller resulting image dimension if both height
			// and width are set and $constrain is also set
			$hx = (100 / ($sw / $w)) * .01;
			$hx = @round ($sh * $hx);
	
			$wx = (100 / ($sh / $h)) * .01;
			$wx = @round ($sw * $wx);
	
			if ($hx < $h) {
				$h = (100 / ($sw / $w)) * .01;
				$h = @round ($sh * $h);
			} else {
				$w = (100 / ($sh / $h)) * .01;
				$w = @round ($sw * $w);
			}
		}
	}
	
	$im = @ImageCreateFromJPEG ($img) or // Read JPEG Image
	$im = @ImageCreateFromPNG ($img) or // or PNG Image
	$im = @ImageCreateFromGIF ($img) or // or GIF Image
	$im = false; // If image is not JPEG, PNG, or GIF
	
	if (!$im) {
		// We get errors from PHP's ImageCreate functions...
		// So let's echo back the contents of the actual image.
		readfile ($img);
	} else {
		// Create the resized image destination
		$thumb = @ImageCreateTrueColor ($w, $h);
		// Copy from image source, resize it, and paste to image destination
		@ImageCopyResampled ($thumb, $im, 0, 0, 0, 0, $w, $h, $sw, $sh);
		// Output resized image
		@ImageJPEG ($thumb,$thumb_file);
	}
}
?>
xarz
Newbie Poster
24 posts since Nov 2008
Reputation Points: 10
Solved Threads: 1
 

Thanks for the code sample, I will test it out!

lonestar23
Light Poster
44 posts since Mar 2008
Reputation Points: 20
Solved Threads: 0
 
Thanks for the code sample, I will test it out!

actually, I myself use it and its really working..

xarz
Newbie Poster
24 posts since Nov 2008
Reputation Points: 10
Solved Threads: 1
 
actually, I myself use it and its really working..

Hi, - great script -btw,
.... but :D

@ImageJPEG ($thumb,$thumb_file);

will create only a JPG thumb image.
If i have a PNG image file to resize (with transparent background), it will get me a JPG image as result - with black background.

I modified the function above to the one:

@ImagePNG ($thumb,$thumb_file);

but, still having a black background on the result PNG image ( I want to have the same transparent background as the initial file)..

Can you help me with that ?!
C.

cosmox
Newbie Poster
2 posts since Dec 2008
Reputation Points: 10
Solved Threads: 0
 
xarz
Newbie Poster
24 posts since Nov 2008
Reputation Points: 10
Solved Threads: 1
 
cosmox
Newbie Poster
2 posts since Dec 2008
Reputation Points: 10
Solved Threads: 0
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You