1
0
mirror of https://github.com/Intervention/image.git synced 2025-08-15 02:14:03 +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\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)
);
}
}

View File

@@ -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;

View File

@@ -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;