1
0
mirror of https://github.com/Intervention/image.git synced 2025-08-16 02:44:01 +02:00

resize methods

This commit is contained in:
Oliver Vogel
2021-10-30 18:10:49 +02:00
parent a2da08af9b
commit f48a206fdf
3 changed files with 70 additions and 14 deletions

View File

@@ -5,6 +5,7 @@ namespace Intervention\Image\Drivers\Abstract;
use Intervention\Image\Collection; use Intervention\Image\Collection;
use Intervention\Image\EncodedImage; use Intervention\Image\EncodedImage;
use Intervention\Image\Exceptions\NotWritableException; use Intervention\Image\Exceptions\NotWritableException;
use Intervention\Image\Geometry\Resizer;
use Intervention\Image\Geometry\Size; use Intervention\Image\Geometry\Size;
use Intervention\Image\Interfaces\EncoderInterface; use Intervention\Image\Interfaces\EncoderInterface;
use Intervention\Image\Interfaces\FrameInterface; use Intervention\Image\Interfaces\FrameInterface;
@@ -59,6 +60,11 @@ abstract class AbstractImage
return new Size($this->width(), $this->height()); return new Size($this->width(), $this->height());
} }
public function getResizer(): Resizer
{
return new Resizer($this->size());
}
public function isAnimated(): bool public function isAnimated(): bool
{ {
return $this->getFrames()->count() > 1; 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( 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)
); );
} }
} }

View File

@@ -5,23 +5,37 @@ namespace Intervention\Image\Drivers\Gd\Modifiers;
use Intervention\Image\Interfaces\FrameInterface; use Intervention\Image\Interfaces\FrameInterface;
use Intervention\Image\Interfaces\ImageInterface; use Intervention\Image\Interfaces\ImageInterface;
use Intervention\Image\Interfaces\ModifierInterface; use Intervention\Image\Interfaces\ModifierInterface;
use Intervention\Image\Interfaces\SizeInterface;
class ResizeModifier implements ModifierInterface 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->target = $target;
$this->height = $height;
} }
public function apply(ImageInterface $image): ImageInterface public function apply(ImageInterface $image): ImageInterface
{ {
foreach ($image as $frame) { foreach ($image as $frame) {
$framesize = $frame->getSize(); $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; return $image;

View File

@@ -5,22 +5,29 @@ namespace Intervention\Image\Drivers\Imagick\Modifiers;
use Intervention\Image\Interfaces\FrameInterface; use Intervention\Image\Interfaces\FrameInterface;
use Intervention\Image\Interfaces\ImageInterface; use Intervention\Image\Interfaces\ImageInterface;
use Intervention\Image\Interfaces\ModifierInterface; use Intervention\Image\Interfaces\ModifierInterface;
use Intervention\Image\Interfaces\SizeInterface;
class ResizeModifier implements ModifierInterface 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->target = $target;
$this->height = $height;
} }
public function apply(ImageInterface $image): ImageInterface public function apply(ImageInterface $image): ImageInterface
{ {
foreach ($image as $frame) { foreach ($image as $frame) {
$frame->getCore()->scaleImage($this->width, $this->height); $frame->getCore()->scaleImage(
$this->target->getWidth(),
$this->target->getHeight()
);
} }
return $image; return $image;