load($from_name); $x = $image->img_x / $max_width; $y = $image->img_y / $max_height; if ($x <= 1 && $y <= 1) { /* no need to change the dimensions */ return $from_name; } $image->fit($max_width, $max_height); $result =& $image->save($to_name, $to_type, $quality); if (PEAR::isError($result)) { return $result; } return $to_name; } /** * Fits the image in the specified box size, but with beautiful proportions. * * If the image is bigger than the box specified by $width and $height, * it will be scaled down to fit inside of it. * If the image is smaller, nothing is done. * The image is going to be resized to either 1/2, 1/3, 1/4, 1/5, 1/6 or 1/7, etc. * * @return string|PEAR_Error the file name or PEAR_Error object on error */ function wg_resizeImageBeautifulFactor($from_name, $to_name, $max_width, $max_height, $to_type = 'jpg', $quality = WG_IMAGE_JPG_QUALITY) { $image =& Image_Transform::factory(''); $image->load($from_name); if ($max_width <= 0 || $max_height <= 0) { $error =& PEAR::raiseError("Invalid arguments.", IMAGE_TRANSFORM_ERROR_ARGUMENT); return $error; } $x = $image->img_x / $max_width; $y = $image->img_y / $max_height; if ($x <= 1 && $y <= 1) { /* no need to change the dimensions */ return $from_name; } elseif ($x > $y) { $image->scaleByFactor(wg_findBestResizeFactor($image->img_x, $max_width)); } else { $image->scaleByFactor(wg_findBestResizeFactor($image->img_y, $max_height)); } /* inspired from Image_Tranform::fit() */ $result =& $image->save($to_name, $to_type, $quality); if (PEAR::isError($result)) { return $result; } return $to_name; } /** * @return float Image ratio that will be ok. * Will return a fraction where the denominator is either 1/2, 1/3, 1/4, 1/5, 1/6 or 1/7, etc. */ function wg_findBestResizeFactor($original_side_size, $max_side_size) { //echo " rescaling $original_side_size to $max_side_size\n
"; $result_size = $original_side_size; $denominator = 0; while ($result_size > $max_side_size) { $result_size = $original_side_size / ++$denominator; //echo "1/$denominator
"; } // echo "will be $result_size
"; return 1 / $denominator; } // test /* $result = wg_resizeImage('test.png', 'result.jpg', 200, 200); if ($result) { echo "success 1\n
"; } $result = wg_resizeImageBeautifulFactor('test.png', 'result_beau.jpg', 320, 240); if ($result) { echo "success 2
"; } */ ?>