You are here

public function FileCommited::resizeImage in N1ED - Visual editor as CKEditor plugin with Bootstrap support 8.2

Resizes an image.

1 call to FileCommited::resizeImage()
FileCommited::applySizes in src/Flmngr/FileUploaderServer/lib/file/FileCommited.php
Apply sized method.

File

src/Flmngr/FileUploaderServer/lib/file/FileCommited.php, line 172

Class

FileCommited
Commited file (data structure about the file of finished upload transaction). Has method for resizing images (applying sizes when finishing transaction).

Namespace

Drupal\n1ed\Flmngr\FileUploaderServer\lib\file

Code

public function resizeImage($targetSize) {
  if ($this->config
    ->getMaxImageResizeWidth() > 0 && $targetSize->width > $this->config
    ->getMaxImageResizeWidth()) {
    throw new MessageException(Message::createMessage(Message::MAX_RESIZE_WIDTH_EXCEEDED, "" . $targetSize->width, $this
      ->getName(), "" . $this->config
      ->getMaxImageResizeWidth()));
  }
  if ($this->config
    ->getMaxImageResizeHeight() > 0 && $targetSize->height > $this->config
    ->getMaxImageResizeHeight()) {
    throw new MessageException(Message::createMessage(Message::MAX_RESIZE_HEIGHT_EXCEEDED, "" . $targetSize->height, $this
      ->getName(), "" . $this->config
      ->getMaxImageResizeHeight()));
  }
  $fileSrc = $this;

  // If this is just a size of main file.
  if ($this->mainFile != NULL) {
    $fileSrc = $this->mainFile;
  }
  $fileOriginal = $fileSrc
    ->getFileOriginal();
  if ($fileOriginal
    ->exists()) {
    $fileSrc = $fileOriginal;
  }
  $imageWidth = $this
    ->getImageWidth();
  $imageHeight = $this
    ->getImageHeight();
  if ($targetSize->width == 0 && $targetSize->height == 0) {
    return FALSE;
  }
  if ($targetSize->width == 0 && $targetSize->height == $imageHeight) {
    return FALSE;
  }
  if ($targetSize->height == 0 && $targetSize->width == $imageWidth) {
    return FALSE;
  }
  if ($targetSize->width > 0 && $targetSize->height > 0 && $targetSize->width == $imageWidth && $targetSize->height == $imageHeight) {
    return FALSE;
  }

  // Calc full target size of image (with paddings)
  $scaleWWithPadding = -1;
  $scaleHWithPadding = -1;
  if ($targetSize->width > 0 && $targetSize->height > 0) {
    $scaleWWithPadding = $targetSize->width;
    $scaleHWithPadding = $targetSize->height;
  }
  else {
    if ($targetSize->width > 0) {
      $scaleWWithPadding = $targetSize->width;
      $scaleHWithPadding = floor($scaleWWithPadding / $imageWidth * $imageHeight);
    }
    else {
      if ($targetSize->height > 0) {
        $scaleHWithPadding = $targetSize->height;
        $scaleWWithPadding = floor($scaleHWithPadding / $imageHeight * $imageWidth);
      }
    }
  }
  if (($scaleWWithPadding > $imageWidth || $scaleHWithPadding > $imageHeight) && !$targetSize->enlarge) {
    $scaleWWithPadding = $imageWidth;
    $scaleHWithPadding = $imageHeight;
  }

  // Check we have not exceeded max width/height.
  if ($this->config
    ->getMaxImageResizeWidth() > 0 && $scaleWWithPadding > $this->config
    ->getMaxImageResizeWidth() || $this->config
    ->getMaxImageResizeHeight() > 0 && $scaleHWithPadding > $this->config
    ->getMaxImageResizeHeight()) {
    $coef = max($scaleWWithPadding / $this->config
      ->getMaxImageResizeWidth(), $scaleHWithPadding / $this->config
      ->getMaxImageResizeHeight());
    $scaleWWithPadding = floor($scaleWWithPadding / $coef);
    $scaleHWithPadding = floor($scaleHWithPadding / $coef);
  }

  // Calc actual size of image (without paddings)
  $scaleW = -1;
  $scaleH = -1;
  if ($scaleWWithPadding / $imageWidth < $scaleHWithPadding / $imageHeight) {
    $scaleW = $scaleWWithPadding;
    $scaleH = floor($scaleW / $imageWidth * $imageHeight);
  }
  else {
    $scaleH = $scaleHWithPadding;
    $scaleW = floor($scaleH / $imageHeight * $imageWidth);
  }
  if ($scaleWWithPadding == $imageWidth && $scaleW == $imageWidth && $scaleHWithPadding == $imageHeight && $scaleH == $imageHeight) {
    return FALSE;
  }

  // no resize is needed
  $fitMode = FileCommited::FIT_EXACT;
  if ($targetSize->width == 0) {
    $fitMode = FileCommited::FIT_TO_HEIGHT;
  }
  else {
    if ($targetSize->height == 0) {
      $fitMode = FileCommited::FIT_TO_WIDTH;
    }
  }
  $image = FileCommited::resizeImageNative($this
    ->getImage(), $scaleW, $scaleH, $fitMode);
  if ($scaleWWithPadding > $scaleW || $scaleHWithPadding > $scaleH) {
    $image = $this
      ->addPaddingsToImageNative($image, $scaleW, $scaleH, $scaleWWithPadding, $scaleHWithPadding);
  }
  $this
    ->writeImage($image);
  return TRUE;
}