diff --git a/src/Drivers/Abstract/AbstractImage.php b/src/Drivers/Abstract/AbstractImage.php index de1464f3..c643c5e5 100644 --- a/src/Drivers/Abstract/AbstractImage.php +++ b/src/Drivers/Abstract/AbstractImage.php @@ -5,6 +5,7 @@ namespace Intervention\Image\Drivers\Abstract; use Intervention\Image\Collection; use Intervention\Image\EncodedImage; use Intervention\Image\Exceptions\NotWritableException; +use Intervention\Image\Geometry\Resizer; use Intervention\Image\Geometry\Size; use Intervention\Image\Interfaces\EncoderInterface; use Intervention\Image\Interfaces\FrameInterface; @@ -59,6 +60,11 @@ abstract class AbstractImage return new Size($this->width(), $this->height()); } + public function getResizer(): Resizer + { + return new Resizer($this->size()); + } + public function isAnimated(): bool { return $this->getFrames()->count() > 1; @@ -102,10 +108,39 @@ abstract class AbstractImage ); } - public function resize(int $width, int $height): ImageInterface + public function resize(...$arguments): ImageInterface { + $size = $this->getResizer()->setTargetSizeByArray($arguments)->resize(); + return $this->modify( - $this->resolveDriverClass('Modifiers\ResizeModifier', $width, $height) + $this->resolveDriverClass('Modifiers\ResizeModifier', $size) + ); + } + + public function resizeDown(...$arguments): ImageInterface + { + $size = $this->getResizer()->setTargetSizeByArray($arguments)->resizeDown(); + + return $this->modify( + $this->resolveDriverClass('Modifiers\ResizeModifier', $size) + ); + } + + public function scale(...$arguments): ImageInterface + { + $size = $this->getResizer()->setTargetSizeByArray($arguments)->scale(); + + return $this->modify( + $this->resolveDriverClass('Modifiers\ResizeModifier', $size) + ); + } + + public function scaleDown(...$arguments): ImageInterface + { + $size = $this->getResizer()->setTargetSizeByArray($arguments)->scaleDown(); + + return $this->modify( + $this->resolveDriverClass('Modifiers\ResizeModifier', $size) ); } } diff --git a/src/Drivers/Gd/Modifiers/ResizeModifier.php b/src/Drivers/Gd/Modifiers/ResizeModifier.php index ea84aca4..673fe9fc 100644 --- a/src/Drivers/Gd/Modifiers/ResizeModifier.php +++ b/src/Drivers/Gd/Modifiers/ResizeModifier.php @@ -5,23 +5,37 @@ namespace Intervention\Image\Drivers\Gd\Modifiers; use Intervention\Image\Interfaces\FrameInterface; use Intervention\Image\Interfaces\ImageInterface; use Intervention\Image\Interfaces\ModifierInterface; +use Intervention\Image\Interfaces\SizeInterface; class ResizeModifier implements ModifierInterface { - protected $width; - protected $height; + /** + * Target size + * + * @var SizeInterface + */ + protected $target; - public function __construct(int $width, int $height) + public function __construct(SizeInterface $target) { - $this->width = $width; - $this->height = $height; + $this->target = $target; } public function apply(ImageInterface $image): ImageInterface { foreach ($image as $frame) { $framesize = $frame->getSize(); - $this->modify($frame, 0, 0, 0, 0, $this->width, $this->height, $framesize->getWidth(), $framesize->getHeight()); + $this->modify( + $frame, + 0, + 0, + 0, + 0, + $this->target->getWidth(), + $this->target->getHeight(), + $framesize->getWidth(), + $framesize->getHeight() + ); } return $image; diff --git a/src/Drivers/Imagick/Modifiers/ResizeModifier.php b/src/Drivers/Imagick/Modifiers/ResizeModifier.php index 22e7f2f1..ee9de755 100644 --- a/src/Drivers/Imagick/Modifiers/ResizeModifier.php +++ b/src/Drivers/Imagick/Modifiers/ResizeModifier.php @@ -5,22 +5,29 @@ namespace Intervention\Image\Drivers\Imagick\Modifiers; use Intervention\Image\Interfaces\FrameInterface; use Intervention\Image\Interfaces\ImageInterface; use Intervention\Image\Interfaces\ModifierInterface; +use Intervention\Image\Interfaces\SizeInterface; class ResizeModifier implements ModifierInterface { - protected $width; - protected $height; + /** + * Target size + * + * @var SizeInterface + */ + protected $target; - public function __construct(int $width, int $height) + public function __construct(SizeInterface $target) { - $this->width = $width; - $this->height = $height; + $this->target = $target; } public function apply(ImageInterface $image): ImageInterface { foreach ($image as $frame) { - $frame->getCore()->scaleImage($this->width, $this->height); + $frame->getCore()->scaleImage( + $this->target->getWidth(), + $this->target->getHeight() + ); } return $image;