You are here

function imageapi_image_scale in ImageAPI 5

Same name and namespace in other branches
  1. 6 imageapi.module \imageapi_image_scale()

Scales an image to the given width and height while maintaining aspect ratio.

The resulting image can be smaller for one or both target dimensions.

Parameters

$image: An image object returned by imageapi_image_open().

$width: The target width, in pixels. This value is omitted then the scaling will based only on the height value.

$height: The target height, in pixels. This value is omitted then the scaling will based only on the width value.

$upscale: Boolean indicating that files smaller than the dimensions will be scalled up. This generally results in a low quality image.

Return value

TRUE or FALSE, based on success.

File

./imageapi.module, line 214
An ImageAPI supporting mulitple image toolkits. Image toolkits are implemented as modules. Images are objects, but have no methods

Code

function imageapi_image_scale(&$image, $width = NULL, $height = NULL, $upscale = FALSE) {
  $aspect = $image->info['height'] / $image->info['width'];
  if ($upscale) {

    // Set width/height according to aspect ratio if either is empty.
    $width = !empty($width) ? $width : $height / $aspect;
    $height = !empty($height) ? $height : $width / $aspect;
  }
  else {

    // Set impossibly large values if the width and height aren't set.
    $width = !empty($width) ? $width : 9999999;
    $height = !empty($height) ? $height : 9999999;

    // Don't scale up.
    if (round($width) >= $image->info['width'] && round($height) >= $image->info['height']) {
      return TRUE;
    }
  }
  if ($aspect < $height / $width) {
    $height = $width * $aspect;
  }
  else {
    $width = $height / $aspect;
  }
  return imageapi_image_resize($image, $width, $height);
}