mirror of
https://github.com/Intervention/image.git
synced 2025-08-17 19:26:25 +02:00
Modifiers
This commit is contained in:
30
src/Drivers/Abstract/Modifiers/AbstractResizeModifier.php
Normal file
30
src/Drivers/Abstract/Modifiers/AbstractResizeModifier.php
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Intervention\Image\Drivers\Abstract\Modifiers;
|
||||||
|
|
||||||
|
use Intervention\Image\Interfaces\ImageInterface;
|
||||||
|
use Intervention\Image\Interfaces\ModifierInterface;
|
||||||
|
use Intervention\Image\Interfaces\SizeInterface;
|
||||||
|
use Intervention\Image\Traits\CanResizeGeometrically;
|
||||||
|
|
||||||
|
abstract class AbstractResizeModifier implements ModifierInterface
|
||||||
|
{
|
||||||
|
use CanResizeGeometrically;
|
||||||
|
|
||||||
|
protected $target;
|
||||||
|
|
||||||
|
public function __construct(SizeInterface $target)
|
||||||
|
{
|
||||||
|
$this->target = $target;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getCropSize(ImageInterface $image): SizeInterface
|
||||||
|
{
|
||||||
|
return $image->getSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getResizeSize(ImageInterface $image): SizeInterface
|
||||||
|
{
|
||||||
|
return $this->target;
|
||||||
|
}
|
||||||
|
}
|
@@ -2,13 +2,9 @@
|
|||||||
|
|
||||||
namespace Intervention\Image\Drivers\Gd\Modifiers;
|
namespace Intervention\Image\Drivers\Gd\Modifiers;
|
||||||
|
|
||||||
use Intervention\Image\Geometry\Resizer;
|
|
||||||
use Intervention\Image\Geometry\Size;
|
|
||||||
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;
|
use Intervention\Image\Interfaces\SizeInterface;
|
||||||
use Intervention\Image\Traits\CanResizeGeometrically;
|
|
||||||
|
|
||||||
class FitDownModifier extends FitModifier implements ModifierInterface
|
class FitDownModifier extends FitModifier implements ModifierInterface
|
||||||
{
|
{
|
||||||
|
@@ -2,13 +2,9 @@
|
|||||||
|
|
||||||
namespace Intervention\Image\Drivers\Gd\Modifiers;
|
namespace Intervention\Image\Drivers\Gd\Modifiers;
|
||||||
|
|
||||||
use Intervention\Image\Geometry\Resizer;
|
|
||||||
use Intervention\Image\Geometry\Size;
|
|
||||||
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;
|
use Intervention\Image\Interfaces\SizeInterface;
|
||||||
use Intervention\Image\Traits\CanResizeGeometrically;
|
|
||||||
|
|
||||||
class FitModifier extends ResizeModifier implements ModifierInterface
|
class FitModifier extends ResizeModifier implements ModifierInterface
|
||||||
{
|
{
|
||||||
|
@@ -2,23 +2,15 @@
|
|||||||
|
|
||||||
namespace Intervention\Image\Drivers\Gd\Modifiers;
|
namespace Intervention\Image\Drivers\Gd\Modifiers;
|
||||||
|
|
||||||
|
use Intervention\Image\Drivers\Abstract\Modifiers\AbstractResizeModifier;
|
||||||
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;
|
use Intervention\Image\Interfaces\SizeInterface;
|
||||||
use Intervention\Image\Traits\CanResizeGeometrically;
|
use Intervention\Image\Traits\CanResizeGeometrically;
|
||||||
|
|
||||||
class ResizeModifier implements ModifierInterface
|
class ResizeModifier extends AbstractResizeModifier implements ModifierInterface
|
||||||
{
|
{
|
||||||
use CanResizeGeometrically;
|
|
||||||
|
|
||||||
protected $target;
|
|
||||||
|
|
||||||
public function __construct(SizeInterface $target)
|
|
||||||
{
|
|
||||||
$this->target = $target;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function apply(ImageInterface $image): ImageInterface
|
public function apply(ImageInterface $image): ImageInterface
|
||||||
{
|
{
|
||||||
$crop = $this->getCropSize($image);
|
$crop = $this->getCropSize($image);
|
||||||
@@ -31,16 +23,6 @@ class ResizeModifier implements ModifierInterface
|
|||||||
return $image;
|
return $image;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getCropSize(ImageInterface $image): SizeInterface
|
|
||||||
{
|
|
||||||
return $image->getSize();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getResizeSize(ImageInterface $image): SizeInterface
|
|
||||||
{
|
|
||||||
return $this->target;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function modify(FrameInterface $frame, SizeInterface $crop, SizeInterface $resize): void
|
protected function modify(FrameInterface $frame, SizeInterface $crop, SizeInterface $resize): void
|
||||||
{
|
{
|
||||||
// create new image
|
// create new image
|
||||||
|
@@ -2,31 +2,32 @@
|
|||||||
|
|
||||||
namespace Intervention\Image\Drivers\Imagick\Modifiers;
|
namespace Intervention\Image\Drivers\Imagick\Modifiers;
|
||||||
|
|
||||||
|
use Intervention\Image\Drivers\Abstract\Modifiers\AbstractResizeModifier;
|
||||||
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;
|
use Intervention\Image\Interfaces\SizeInterface;
|
||||||
|
|
||||||
class ResizeModifier implements ModifierInterface
|
class ResizeModifier extends AbstractResizeModifier implements ModifierInterface
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* Target size
|
|
||||||
*
|
|
||||||
* @var SizeInterface
|
|
||||||
*/
|
|
||||||
protected $target;
|
|
||||||
|
|
||||||
public function __construct(SizeInterface $target)
|
|
||||||
{
|
|
||||||
$this->target = $target;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function apply(ImageInterface $image): ImageInterface
|
public function apply(ImageInterface $image): ImageInterface
|
||||||
{
|
{
|
||||||
|
$resize = $this->getResizeSize($image);
|
||||||
|
$crop = $this->getResizeSize($image);
|
||||||
|
$shouldCrop = $crop != $image->getSize();
|
||||||
foreach ($image as $frame) {
|
foreach ($image as $frame) {
|
||||||
|
if ($shouldCrop) {
|
||||||
|
$frame->getCore()->cropImage(
|
||||||
|
$crop->getWidth(),
|
||||||
|
$crop->getHeight(),
|
||||||
|
$crop->getPivot()->getX(),
|
||||||
|
$crop->getPivot()->getY()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
$frame->getCore()->scaleImage(
|
$frame->getCore()->scaleImage(
|
||||||
$this->target->getWidth(),
|
$resize->getWidth(),
|
||||||
$this->target->getHeight()
|
$resize->getHeight()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -20,6 +20,23 @@ class SizeTest extends TestCase
|
|||||||
$this->assertEquals(200, $size->getHeight());
|
$this->assertEquals(200, $size->getHeight());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testCompareSizes(): void
|
||||||
|
{
|
||||||
|
$size1 = new Size(300, 200);
|
||||||
|
$size2 = new Size(300, 200);
|
||||||
|
$size2a = new Size(300, 200, new Point(1, 1));
|
||||||
|
$size2b = new Size(300, 200, new Point(1, 1));
|
||||||
|
$size3 = new Size(300, 201);
|
||||||
|
$size4 = new Size(301, 200);
|
||||||
|
|
||||||
|
$this->assertTrue($size1 == $size2);
|
||||||
|
$this->assertTrue($size2a == $size2b);
|
||||||
|
$this->assertFalse($size2 == $size2a);
|
||||||
|
$this->assertFalse($size2 == $size3);
|
||||||
|
$this->assertFalse($size2 == $size4);
|
||||||
|
$this->assertFalse($size3 == $size4);
|
||||||
|
}
|
||||||
|
|
||||||
public function testGetWidth()
|
public function testGetWidth()
|
||||||
{
|
{
|
||||||
$size = new Size(800, 600);
|
$size = new Size(800, 600);
|
||||||
|
Reference in New Issue
Block a user