You are here

class ScaleAndCrop in Drupal 10

Same name and namespace in other branches
  1. 8 core/modules/system/src/Plugin/ImageToolkit/Operation/gd/ScaleAndCrop.php \Drupal\system\Plugin\ImageToolkit\Operation\gd\ScaleAndCrop
  2. 9 core/modules/system/src/Plugin/ImageToolkit/Operation/gd/ScaleAndCrop.php \Drupal\system\Plugin\ImageToolkit\Operation\gd\ScaleAndCrop

Defines GD2 Scale and crop operation.

Plugin annotation


@ImageToolkitOperation(
  id = "gd_scale_and_crop",
  toolkit = "gd",
  operation = "scale_and_crop",
  label = @Translation("Scale and crop"),
  description = @Translation("Scales an image to the exact width and height given. This plugin achieves the target aspect ratio by cropping the original image equally on both sides, or equally on the top and bottom. This function is useful to create uniform sized avatars from larger images.")
)

Hierarchy

Expanded class hierarchy of ScaleAndCrop

3 string references to 'ScaleAndCrop'
ImageTest::testScaleAndCropFails in core/tests/Drupal/Tests/Core/Image/ImageTest.php
Tests \Drupal\Core\Image\Image::scaleAndCrop().
ImageTest::testScaleAndCropHeight in core/tests/Drupal/Tests/Core/Image/ImageTest.php
Tests \Drupal\Core\Image\Image::scaleAndCrop().
ImageTest::testScaleAndCropWidth in core/tests/Drupal/Tests/Core/Image/ImageTest.php
Tests \Drupal\Core\Image\Image::scaleAndCrop().

File

core/modules/system/src/Plugin/ImageToolkit/Operation/gd/ScaleAndCrop.php, line 16

Namespace

Drupal\system\Plugin\ImageToolkit\Operation\gd
View source
class ScaleAndCrop extends GDImageToolkitOperationBase {

  /**
   * {@inheritdoc}
   */
  protected function arguments() {
    return [
      'x' => [
        'description' => 'The horizontal offset for the start of the crop, in pixels',
        'required' => FALSE,
        'default' => NULL,
      ],
      'y' => [
        'description' => 'The vertical offset for the start the crop, in pixels',
        'required' => FALSE,
        'default' => NULL,
      ],
      'width' => [
        'description' => 'The target width, in pixels',
      ],
      'height' => [
        'description' => 'The target height, in pixels',
      ],
    ];
  }

  /**
   * {@inheritdoc}
   */
  protected function validateArguments(array $arguments) {
    $actualWidth = $this
      ->getToolkit()
      ->getWidth();
    $actualHeight = $this
      ->getToolkit()
      ->getHeight();
    $scaleFactor = max($arguments['width'] / $actualWidth, $arguments['height'] / $actualHeight);
    $arguments['x'] = isset($arguments['x']) ? (int) round($arguments['x']) : (int) round(($actualWidth * $scaleFactor - $arguments['width']) / 2);
    $arguments['y'] = isset($arguments['y']) ? (int) round($arguments['y']) : (int) round(($actualHeight * $scaleFactor - $arguments['height']) / 2);
    $arguments['resize'] = [
      'width' => (int) round($actualWidth * $scaleFactor),
      'height' => (int) round($actualHeight * $scaleFactor),
    ];

    // 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_and_crop' operation");
    }
    if ($arguments['height'] <= 0) {
      throw new \InvalidArgumentException("Invalid height ('{$arguments['height']}') specified for the image 'scale_and_crop' operation");
    }
    return $arguments;
  }

  /**
   * {@inheritdoc}
   */
  protected function execute(array $arguments = []) {
    return $this
      ->getToolkit()
      ->apply('resize', $arguments['resize']) && $this
      ->getToolkit()
      ->apply('crop', $arguments);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DependencySerializationTrait::$_entityStorages protected property
DependencySerializationTrait::$_serviceIds protected property
DependencySerializationTrait::__sleep public function 2
DependencySerializationTrait::__wakeup public function 2
GDImageToolkitOperationBase::getToolkit protected function The correctly typed image toolkit for GD operations. Overrides ImageToolkitOperationBase::getToolkit
ImageToolkitOperationBase::$logger protected property A logger instance.
ImageToolkitOperationBase::$toolkit protected property The image toolkit.
ImageToolkitOperationBase::apply final public function
ImageToolkitOperationBase::prepareArguments protected function Checks if required arguments are passed in and adds defaults for non passed in optional arguments.
ImageToolkitOperationBase::__construct public function Constructs an image toolkit operation plugin.
MessengerTrait::$messenger protected property The messenger. 18
MessengerTrait::messenger public function Gets the messenger. 18
MessengerTrait::setMessenger public function Sets the messenger.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition.
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function
PluginBase::getDerivativeId public function
PluginBase::getPluginDefinition public function 2
PluginBase::getPluginId public function
PluginBase::isConfigurable public function Determines if the plugin is configurable.
ScaleAndCrop::arguments protected function Returns the definition of the operation arguments. Overrides ImageToolkitOperationBase::arguments
ScaleAndCrop::execute protected function Performs the actual manipulation on the image. Overrides ImageToolkitOperationBase::execute
ScaleAndCrop::validateArguments protected function Validates the arguments. Overrides ImageToolkitOperationBase::validateArguments
StringTranslationTrait::$stringTranslation protected property The string translation service. 3
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 1
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.