You are here

protected function AdvanceResize::execute in image effect 1.0.x

Same name in this branch
  1. 1.0.x src/Plugin/ImageToolkit/Operation/gd/AdvanceResize.php \Drupal\image_effect\Plugin\ImageToolkit\Operation\gd\AdvanceResize::execute()
  2. 1.0.x src/Plugin/ImageToolkit/Operation/imagick/AdvanceResize.php \Drupal\image_effect\Plugin\ImageToolkit\Operation\imagick\AdvanceResize::execute()
Same name and namespace in other branches
  1. 8 src/Plugin/ImageToolkit/Operation/imagick/AdvanceResize.php \Drupal\image_effect\Plugin\ImageToolkit\Operation\imagick\AdvanceResize::execute()
  2. 2.0.x src/Plugin/ImageToolkit/Operation/imagick/AdvanceResize.php \Drupal\image_effect\Plugin\ImageToolkit\Operation\imagick\AdvanceResize::execute()

File

src/Plugin/ImageToolkit/Operation/imagick/AdvanceResize.php, line 57

Class

AdvanceResize
Defines imagick advance resize operation.

Namespace

Drupal\image_effect\Plugin\ImageToolkit\Operation\imagick

Code

protected function execute(array $arguments = []) {

  // Create a new resource of the required dimensions, and copy and resize
  // the original resource on it with resampling. Destroy the original
  // resource upon success.
  $w = $arguments['width'];
  $h = $arguments['height'];
  $src_x = 0;
  $src_y = 0;
  $src_w = $this
    ->getToolkit()
    ->getWidth();
  $src_h = $this
    ->getToolkit()
    ->getHeight();
  $dst_w = $src_w;
  $dst_h = $src_h;
  $dst_x = 0;
  $dst_y = 0;
  if ($w > $src_w) {
    $dst_x = ($w - $src_w) / 2;
  }
  if ($h > $src_h) {
    $dst_y = ($h - $src_h) / 2;
  }
  $original_resource = $this
    ->getToolkit()
    ->getResource();
  $dst_image = new Imagick();
  $dst_image
    ->newImage($w, $h, new ImagickPixel("white"));
  $dst_image
    ->compositeImage($original_resource, Imagick::COMPOSITE_DEFAULT, $dst_x, $dst_y);
  $image_format = $original_resource
    ->getImageFormat();
  $dst_image
    ->setImageFormat($image_format);
  $original_resource
    ->destroy();
  $this
    ->getToolkit()
    ->setResource($dst_image);
  return TRUE;
}