Index: wp-admin/includes/image.php
===================================================================
--- wp-admin/includes/image.php	(revision 6287)
+++ wp-admin/includes/image.php	(working copy)
@@ -1,108 +1,92 @@
 <?php
+/**
+ * File contains all the administration image manipulation functions.
+ *
+ * @package WordPress
+ */
 
-function get_udims( $width, $height) {
-	if ( $height <= 96 && $width <= 128 )
-		return array( $width, $height);
-	elseif ( $width / $height > 4 / 3 )
-		return array( 128, (int) ($height / $width * 128 ));
-	else
-		return array( (int) ($width / $height * 96 ), 96 );
-}
+/**
+ * wp_create_thumbnail() - Create a thumbnail from an Image given a maximum side size.
+ *
+ * @package WordPress
+ * @param	mixed	$file	Filename of the original image, Or attachment id
+ * @param	int		$max_side	Maximum length of a single side for the thumbnail
+ * @return	string			Thumbnail path on success, Error string on failure
+ *
+ * This function can handle most image file formats which PHP supports.
+ * If PHP does not have the functionality to save in a file of the same format, the thumbnail will be created as a jpeg.
+ */
+function wp_create_thumbnail( $file, $max_side, $depreciated = '' ) {
+	if ( ctype_digit( $file ) ) // Handle int as attachment ID
+		$file = get_attached_file( $file );
 
-function wp_create_thumbnail( $file, $max_side, $effect = '' ) {
+	$image = wp_load_image( $file );
+	
+	if ( !is_resource( $image ) )
+		return $image;
 
-		// 1 = GIF, 2 = JPEG, 3 = PNG
+	list($sourceImageWidth, $sourceImageHeight, $sourceImageType) = getimagesize( $file );
 
-	if ( file_exists( $file ) ) {
-		$type = getimagesize( $file );
+	if ( function_exists( 'imageantialias' ))
+		imageantialias( $image, true );
 
-		// if the associated function doesn't exist - then it's not
-		// handle. duh. i hope.
+	list($image_new_width, $image_new_height) = wp_shrink_dimensions( $sourceImageWidth, $sourceImageHeight, $max_side, $max_side);
 
-		if (!function_exists( 'imagegif' ) && $type[2] == 1 ) {
-			$error = __( 'Filetype not supported. Thumbnail not created.' );
-		}
-		elseif (!function_exists( 'imagejpeg' ) && $type[2] == 2 ) {
-			$error = __( 'Filetype not supported. Thumbnail not created.' );
-		}
-		elseif (!function_exists( 'imagepng' ) && $type[2] == 3 ) {
-			$error = __( 'Filetype not supported. Thumbnail not created.' );
-		} else {
+	$thumbnail = imagecreatetruecolor( $image_new_width, $image_new_height);
+	@ imagecopyresampled( $thumbnail, $image, 0, 0, 0, 0, $image_new_width, $image_new_height, $sourceImageWidth, $sourceImageHeight );
 
-			// create the initial copy from the original file
-			if ( $type[2] == 1 ) {
-				$image = imagecreatefromgif( $file );
-			}
-			elseif ( $type[2] == 2 ) {
-				$image = imagecreatefromjpeg( $file );
-			}
-			elseif ( $type[2] == 3 ) {
-				$image = imagecreatefrompng( $file );
-			}
+	imagedestroy( $image ); // Free up memory 
 
-			if ( function_exists( 'imageantialias' ))
-				imageantialias( $image, TRUE );
+	// If no filters change the filename, we'll do a default transformation.
+	if ( basename( $file ) == $thumb = apply_filters( 'thumbnail_filename', basename( $file ) ) )
+		$thumb = preg_replace( '!(\.[^.]+)?$!', '.thumbnail$1', basename( $file ), 1 );
 
-			$image_attr = getimagesize( $file );
+	$thumbpath = str_replace( basename( $file ), $thumb, $file );
 
-			// figure out the longest side
+	switch( $sourceImageType ){
+		default: // We'll create a Jpeg if we cant use its native file format
+			$thumb = preg_replace( '/\\.[^\\.]+$/', '.jpg', $thumb ); //Change file extension to Jpg
+		case IMAGETYPE_JPEG:
+			if (!imagejpeg( $thumbnail, $thumbpath ) )
+				return __( 'Thumbnail path invalid' );
+			break;
+		case IMAGETYPE_GIF:
+			if (!imagegif( $thumbnail, $thumbpath ) )
+				return __( 'Thumbnail path invalid' );
+			break;
+		case IMAGETYPE_PNG:
+			if (!imagepng( $thumbnail, $thumbpath ) )
+				return __( 'Thumbnail path invalid' );
+			break;
+	}
 
-			if ( $image_attr[0] > $image_attr[1] ) {
-				$image_width = $image_attr[0];
-				$image_height = $image_attr[1];
-				$image_new_width = $max_side;
+	imagedestroy( $thumbnail ); // Free up memory 
+	
+	// Set correct file permissions 
+	$stat = stat( dirname( $thumbpath )); 
+	$perms = $stat['mode'] & 0000666; //same permissions as parent folder, strip off the executable bits
+	@ chmod( $thumbpath, $perms ); 
 
-				$image_ratio = $image_width / $image_new_width;
-				$image_new_height = $image_height / $image_ratio;
-				//width is > height
-			} else {
-				$image_width = $image_attr[0];
-				$image_height = $image_attr[1];
-				$image_new_height = $max_side;
-
-				$image_ratio = $image_height / $image_new_height;
-				$image_new_width = $image_width / $image_ratio;
-				//height > width
-			}
-
-			$thumbnail = imagecreatetruecolor( $image_new_width, $image_new_height);
-			@ imagecopyresampled( $thumbnail, $image, 0, 0, 0, 0, $image_new_width, $image_new_height, $image_attr[0], $image_attr[1] );
-
-			// If no filters change the filename, we'll do a default transformation.
-			if ( basename( $file ) == $thumb = apply_filters( 'thumbnail_filename', basename( $file ) ) )
-				$thumb = preg_replace( '!(\.[^.]+)?$!', '.thumbnail' . '$1', basename( $file ), 1 );
-
-			$thumbpath = str_replace( basename( $file ), $thumb, $file );
-
-			// move the thumbnail to its final destination
-			if ( $type[2] == 1 ) {
-				if (!imagegif( $thumbnail, $thumbpath ) ) {
-					$error = __( "Thumbnail path invalid" );
-				}
-			}
-			elseif ( $type[2] == 2 ) {
-				if (!imagejpeg( $thumbnail, $thumbpath ) ) {
-					$error = __( "Thumbnail path invalid" );
-				}
-			}
-			elseif ( $type[2] == 3 ) {
-				if (!imagepng( $thumbnail, $thumbpath ) ) {
-					$error = __( "Thumbnail path invalid" );
-				}
-			}
-
-		}
-	} else {
-		$error = __( 'File not found' );
-	}
-
-	if (!empty ( $error ) ) {
-		return $error;
-	} else {
-		return apply_filters( 'wp_create_thumbnail', $thumbpath );
-	}
+	return apply_filters( 'wp_create_thumbnail', $thumbpath );
 }
 
+/**
+ * wp_crop_image() - Crop an Image to a given size.
+ *
+ * @package WordPress
+ * @internal Missing Long Description
+ * @param	int	$src_file	The source file
+ * @param	int	$src_x		The start x position to crop from
+ * @param	int	$src_y		The start y position to crop from
+ * @param	int	$src_w		The width to crop
+ * @param	int	$src_h		The height to crop
+ * @param	int	$dst_w		The destination width
+ * @param	int	$dst_h		The destination height
+ * @param	int	$src_abs	If the source crop points are absolute
+ * @param	int	$dst_file	The destination file to write to
+ * @return	string			New filepath on success, String error message on failure
+ *
+ */
 function wp_crop_image( $src_file, $src_x, $src_y, $src_w, $src_h, $dst_w, $dst_h, $src_abs = false, $dst_file = false ) {
 	if ( ctype_digit( $src_file ) ) // Handle int as attachment ID
 		$src_file = get_attached_file( $src_file );
@@ -123,9 +107,11 @@
 		imageantialias( $dst, true );
 
 	imagecopyresampled( $dst, $src, 0, 0, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h );
+	
+	imagedestroy( $src ); // Free up memory 
 
-	if ( !$dst_file )
-		$dst_file = str_replace( basename( $src_file ), 'cropped-'.basename( $src_file ), $src_file );
+	if ( ! $dst_file )
+		$dst_file = str_replace( basename( $src_file ), 'cropped-' . basename( $src_file ), $src_file );
 
 	$dst_file = preg_replace( '/\\.[^\\.]+$/', '.jpg', $dst_file );
 
@@ -135,15 +121,25 @@
 		return false;
 }
 
+/**
+ * wp_generate_attachment_metadata() - Generate post Image attachment Metadata
+ *
+ * @package WordPress
+ * @internal Missing Long Description
+ * @param	int		$attachment_id	Attachment Id to process
+ * @param	string	$file	Filepath of the Attached image
+ * @return	mixed			Metadata for attachment
+ *
+ */
 function wp_generate_attachment_metadata( $attachment_id, $file ) {
 	$attachment = get_post( $attachment_id );
 
 	$metadata = array();
 	if ( preg_match('!^image/!', get_post_mime_type( $attachment )) ) {
-		$imagesize = getimagesize($file);
-		$metadata['width'] = $imagesize['0'];
-		$metadata['height'] = $imagesize['1'];
-		list($uwidth, $uheight) = get_udims($metadata['width'], $metadata['height']);
+		$imagesize = getimagesize( $file );
+		$metadata['width'] = $imagesize[0];
+		$metadata['height'] = $imagesize[1];
+		list($uwidth, $uheight) = wp_shrink_dimensions($metadata['width'], $metadata['height']);
 		$metadata['hwstring_small'] = "height='$uheight' width='$uwidth'";
 		$metadata['file'] = $file;
 
@@ -160,33 +156,70 @@
 	return apply_filters( 'wp_generate_attachment_metadata', $metadata );
 }
 
+/**
+ * wp_load_image() - Load an image which PHP Supports.
+ *
+ * @package WordPress
+ * @internal Missing Long Description
+ * @param	string	$file	Filename of the image to load
+ * @return	resource		The resulting image resource on success, Error string on failure.
+ *
+ */
 function wp_load_image( $file ) {
 	if ( ctype_digit( $file ) )
 		$file = get_attached_file( $file );
 
-	if ( !file_exists( $file ) )
+	if ( ! file_exists( $file ) )
 		return sprintf(__("File '%s' doesn't exist?"), $file);
 
 	if ( ! function_exists('imagecreatefromstring') )
 		return __('The GD image library is not installed.');
 
-	$contents = file_get_contents( $file );
+	$image = @imagecreatefromstring( @file_get_contents( $file ) );
 
-	$image = imagecreatefromstring( $contents );
-
 	if ( !is_resource( $image ) )
 		return sprintf(__("File '%s' is not an image."), $file);
 
 	return $image;
 }
 
+/**
+ * get_udims() - Calculated the new dimentions for downsampled images
+ *
+ * @package WordPress
+ * @internal Missing Description
+ * @see wp_shrink_dimensions()
+ * @param	int		$width	Current width of the image
+ * @param	int 	$height	Current height of the image
+ * @return	mixed			Array(height,width) of shrunk dimensions.
+ *
+ */
+function get_udims( $width, $height) {
+	return wp_shrink_dimensions( $width, $height );
+}
+/**
+ * wp_shrink_dimensions() - Calculates the new dimentions for a downsampled image.
+ *
+ * @package WordPress
+ * @internal Missing Long Description
+ * @param	int		$width	Current width of the image
+ * @param	int 	$height	Current height of the image
+ * @param	int		$wmax	Maximum wanted width
+ * @param	int		$hmax	Maximum wanted height
+ * @return	mixed			Array(height,width) of shrunk dimensions.
+ *
+ */
 function wp_shrink_dimensions( $width, $height, $wmax = 128, $hmax = 96 ) {
-	if ( $height <= $hmax && $width <= $wmax )
+	if ( $height <= $hmax && $width <= $wmax ){
+		//Image is smaller than max
 		return array( $width, $height);
-	elseif ( $width / $height > $wmax / $hmax )
+	} elseif ( $width / $height > $wmax / $hmax ) {
+		//Image Width will be greatest
 		return array( $wmax, (int) ($height / $width * $wmax ));
-	else
+	} else {
+		//Image Height will be greatest
 		return array( (int) ($width / $height * $hmax ), $hmax );
+	}
 }
 
 ?>
Index: wp-includes/compat.php
===================================================================
--- wp-includes/compat.php	(revision 6287)
+++ wp-includes/compat.php	(working copy)
@@ -147,4 +147,15 @@
 	}
 }
 
+// Added in PHP 4.3.0?
+if (!defined('IMAGETYPE_GIF'))
+    define('IMAGETYPE_GIF', 1);
+
+if (!defined('IMAGETYPE_JPEG'))
+    define('IMAGETYPE_JPEG', 2);
+
+if (!defined('IMAGETYPE_PNG'))
+    define('IMAGETYPE_PNG', 3);
+
+
 ?>

