From c23987129b52250dfe4f6b5d4dd8b10846ff731c Mon Sep 17 00:00:00 2001 From: Fabian Gruber Date: Fri, 30 May 2025 16:29:44 +0200 Subject: [PATCH 1/2] feat: set resource limits --- src/Image/Image.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/Image/Image.php b/src/Image/Image.php index ad191b4..5ebd7e5 100644 --- a/src/Image/Image.php +++ b/src/Image/Image.php @@ -552,4 +552,17 @@ protected function getSizeByFixedWidth(int $newWidth): int return intval($newHeight); } + + public static function setResourceLimits(string $type, int $value): void + { + match ($type) { + 'area' => Imagick::setResourceLimits(Imagick::RESOURCETYPE_AREA, $value), + 'disk' => Imagick::setResourceLimits(Imagick::RESOURCETYPE_DISK, $value), + 'file' => Imagick::setResourceLimits(Imagick::RESOURCETYPE_FILE, $value), + 'map' => Imagick::setResourceLimits(Imagick::RESOURCETYPE_MAP, $value), + 'memory' => Imagick::setResourceLimits(Imagick::RESOURCETYPE_MEMORY, $value), + 'thread' => Imagick::setResourceLimits(Imagick::RESOURCETYPE_THREAD, $value), + default => null, + }; + } } From d58f35ccf70f63555f1903453386735cfcbc1f55 Mon Sep 17 00:00:00 2001 From: Fabian Gruber Date: Fri, 30 May 2025 16:36:58 +0200 Subject: [PATCH 2/2] fix: don't crop image if parameters are not changed --- src/Image/Image.php | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/Image/Image.php b/src/Image/Image.php index 5ebd7e5..319948b 100644 --- a/src/Image/Image.php +++ b/src/Image/Image.php @@ -106,8 +106,17 @@ public static function getGravityTypes(): array * * @throws \Throwable */ - public function crop(int $width, int $height, string $gravity = Image::GRAVITY_CENTER) + public function crop(int $width, int $height, string $gravity = Image::GRAVITY_CENTER): self { + // if no changes to Gravity, Width or Height, don't process image + if ($gravity === Image::GRAVITY_CENTER && + ( + (! empty($width) && ! empty($height)) && + ($width == $this->width && $height == $this->height) + )) { + return $this; + } + $originalAspect = $this->width / $this->height; if (empty($width)) { @@ -553,15 +562,15 @@ protected function getSizeByFixedWidth(int $newWidth): int return intval($newHeight); } - public static function setResourceLimits(string $type, int $value): void + public static function setResourceLimit(string $type, int $value): void { match ($type) { - 'area' => Imagick::setResourceLimits(Imagick::RESOURCETYPE_AREA, $value), - 'disk' => Imagick::setResourceLimits(Imagick::RESOURCETYPE_DISK, $value), - 'file' => Imagick::setResourceLimits(Imagick::RESOURCETYPE_FILE, $value), - 'map' => Imagick::setResourceLimits(Imagick::RESOURCETYPE_MAP, $value), - 'memory' => Imagick::setResourceLimits(Imagick::RESOURCETYPE_MEMORY, $value), - 'thread' => Imagick::setResourceLimits(Imagick::RESOURCETYPE_THREAD, $value), + 'area' => Imagick::setResourceLimit(Imagick::RESOURCETYPE_AREA, $value), + 'disk' => Imagick::setResourceLimit(Imagick::RESOURCETYPE_DISK, $value), + 'file' => Imagick::setResourceLimit(Imagick::RESOURCETYPE_FILE, $value), + 'map' => Imagick::setResourceLimit(Imagick::RESOURCETYPE_MAP, $value), + 'memory' => Imagick::setResourceLimit(Imagick::RESOURCETYPE_MEMORY, $value), + 'thread' => Imagick::setResourceLimit(Imagick::RESOURCETYPE_THREAD, $value), default => null, }; }