Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
CRAP | |
100.00% |
9 / 9 |
Image | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
9 | |
100.00% |
9 / 9 |
scaleDimensions | |
100.00% |
1 / 1 |
9 | |
100.00% |
9 / 9 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\Component\Utility\Image. | |
*/ | |
namespace Drupal\Component\Utility; | |
/** | |
* Provides helpers to operate on images. | |
* | |
* @ingroup utility | |
*/ | |
class Image { | |
/** | |
* Scales image dimensions while maintaining aspect ratio. | |
* | |
* The resulting dimensions can be smaller for one or both target dimensions. | |
* | |
* @param array $dimensions | |
* Dimensions to be modified - an array with components width and height, in | |
* pixels. | |
* @param int $width | |
* (optional) The target width, in pixels. If this value is NULL then the | |
* scaling will be based only on the height value. | |
* @param int $height | |
* (optional) The target height, in pixels. If this value is NULL then the | |
* scaling will be based only on the width value. | |
* @param bool $upscale | |
* (optional) Boolean indicating that images smaller than the target | |
* dimensions will be scaled up. This generally results in a low quality | |
* image. | |
* | |
* @return bool | |
* TRUE if $dimensions was modified, FALSE otherwise. | |
* | |
* @see image_scale() | |
*/ | |
public static function scaleDimensions(array &$dimensions, $width = NULL, $height = NULL, $upscale = FALSE) { | |
$aspect = $dimensions['height'] / $dimensions['width']; | |
// Calculate one of the dimensions from the other target dimension, | |
// ensuring the same aspect ratio as the source dimensions. If one of the | |
// target dimensions is missing, that is the one that is calculated. If both | |
// are specified then the dimension calculated is the one that would not be | |
// calculated to be bigger than its target. | |
if (($width && !$height) || ($width && $height && $aspect < $height / $width)) { | |
$height = (int) round($width * $aspect); | |
} | |
else { | |
$width = (int) round($height / $aspect); | |
} | |
// Don't upscale if the option isn't enabled. | |
if (!$upscale && ($width >= $dimensions['width'] || $height >= $dimensions['height'])) { | |
return FALSE; | |
} | |
$dimensions['width'] = $width; | |
$dimensions['height'] = $height; | |
return TRUE; | |
} | |
} |