Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
33.33% |
1 / 3 |
CRAP | |
61.11% |
11 / 18 |
| Scale | |
0.00% |
0 / 1 |
|
33.33% |
1 / 3 |
34.00 | |
61.11% |
11 / 18 |
| arguments | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| validateArguments | |
0.00% |
0 / 1 |
11.23 | |
76.92% |
10 / 13 |
|||
| execute | |
0.00% |
0 / 1 |
42 | |
0.00% |
0 / 4 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\system\Plugin\ImageToolkit\Operation\gd\Scale. | |
| */ | |
| namespace Drupal\system\Plugin\ImageToolkit\Operation\gd; | |
| /** | |
| * Defines GD2 Scale operation. | |
| * | |
| * @ImageToolkitOperation( | |
| * id = "gd_scale", | |
| * toolkit = "gd", | |
| * operation = "scale", | |
| * label = @Translation("Scale"), | |
| * description = @Translation("Scales an image while maintaining aspect ratio. The resulting image can be smaller for one or both target dimensions.") | |
| * ) | |
| */ | |
| class Scale extends Resize { | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| protected function arguments() { | |
| return array( | |
| 'width' => array( | |
| 'description' => 'The target width, in pixels. This value is omitted then the scaling will based only on the height value', | |
| 'required' => FALSE, | |
| 'default' => NULL, | |
| ), | |
| 'height' => array( | |
| 'description' => 'The target height, in pixels. This value is omitted then the scaling will based only on the width value', | |
| 'required' => FALSE, | |
| 'default' => NULL, | |
| ), | |
| 'upscale' => array( | |
| 'description' => 'Boolean indicating that files smaller than the dimensions will be scaled up. This generally results in a low quality image', | |
| 'required' => FALSE, | |
| 'default' => FALSE, | |
| ), | |
| ); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| protected function validateArguments(array $arguments) { | |
| // Assure at least one dimension. | |
| if (empty($arguments['width']) && empty($arguments['height'])) { | |
| throw new \InvalidArgumentException("At least one dimension ('width' or 'height') must be provided to the image 'scale' operation"); | |
| } | |
| // 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. | |
| $aspect = $this->getToolkit()->getHeight() / $this->getToolkit()->getWidth(); | |
| if (($arguments['width'] && !$arguments['height']) || ($arguments['width'] && $arguments['height'] && $aspect < $arguments['height'] / $arguments['width'])) { | |
| $arguments['height'] = (int) round($arguments['width'] * $aspect); | |
| } | |
| else { | |
| $arguments['width'] = (int) round($arguments['height'] / $aspect); | |
| } | |
| // Assure integers for all arguments. | |
| $arguments['width'] = (int) round($arguments['width']); | |
| $arguments['height'] = (int) round($arguments['height']); | |
| // Fail when width or height are 0 or negative. | |
| if ($arguments['width'] <= 0) { | |
| throw new \InvalidArgumentException("Invalid width ('{$arguments['width']}') specified for the image 'scale' operation"); | |
| } | |
| if ($arguments['height'] <= 0) { | |
| throw new \InvalidArgumentException("Invalid height ('{$arguments['height']}') specified for the image 'scale' operation"); | |
| } | |
| return $arguments; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| protected function execute(array $arguments = array()) { | |
| // Don't scale if we don't change the dimensions at all. | |
| if ($arguments['width'] !== $this->getToolkit()->getWidth() || $arguments['height'] !== $this->getToolkit()->getHeight()) { | |
| // Don't upscale if the option isn't enabled. | |
| if ($arguments['upscale'] || ($arguments['width'] <= $this->getToolkit()->getWidth() && $arguments['height'] <= $this->getToolkit()->getHeight())) { | |
| return parent::execute($arguments); | |
| } | |
| } | |
| return TRUE; | |
| } | |
| } |