From 41266db66d4e01d2b886d6dacce5cf74ecefc24d Mon Sep 17 00:00:00 2001 From: Oliver Vogel Date: Sun, 31 Aug 2014 12:16:28 +0200 Subject: [PATCH] added optional constraint parameter to widen and heighten --- .../Image/Gd/Commands/HeightenCommand.php | 5 +++- .../Image/Gd/Commands/WidenCommand.php | 5 +++- .../Imagick/Commands/HeightenCommand.php | 5 +++- .../Image/Imagick/Commands/WidenCommand.php | 5 +++- tests/GdSystemTest.php | 26 +++++++++++++++++++ tests/ImagickSystemTest.php | 26 +++++++++++++++++++ 6 files changed, 68 insertions(+), 4 deletions(-) diff --git a/src/Intervention/Image/Gd/Commands/HeightenCommand.php b/src/Intervention/Image/Gd/Commands/HeightenCommand.php index 6dc75085..51e0abdf 100644 --- a/src/Intervention/Image/Gd/Commands/HeightenCommand.php +++ b/src/Intervention/Image/Gd/Commands/HeightenCommand.php @@ -13,11 +13,14 @@ class HeightenCommand extends ResizeCommand public function execute($image) { $height = $this->argument(0)->type('digit')->required()->value(); + $additionalConstraints = $this->argument(1)->type('closure')->value(); $this->arguments[0] = null; $this->arguments[1] = $height; - $this->arguments[2] = function ($constraint) { + $this->arguments[2] = function ($constraint) use ($additionalConstraints) { $constraint->aspectRatio(); + if(is_callable($additionalConstraints)) + $additionalConstraints($constraint); }; return parent::execute($image); diff --git a/src/Intervention/Image/Gd/Commands/WidenCommand.php b/src/Intervention/Image/Gd/Commands/WidenCommand.php index 2e9a00e3..c7d396f1 100644 --- a/src/Intervention/Image/Gd/Commands/WidenCommand.php +++ b/src/Intervention/Image/Gd/Commands/WidenCommand.php @@ -13,11 +13,14 @@ class WidenCommand extends ResizeCommand public function execute($image) { $width = $this->argument(0)->type('digit')->required()->value(); + $additionalConstraints = $this->argument(1)->type('closure')->value(); $this->arguments[0] = $width; $this->arguments[1] = null; - $this->arguments[2] = function ($constraint) { + $this->arguments[2] = function ($constraint) use ($additionalConstraints) { $constraint->aspectRatio(); + if(is_callable($additionalConstraints)) + $additionalConstraints($constraint); }; return parent::execute($image); diff --git a/src/Intervention/Image/Imagick/Commands/HeightenCommand.php b/src/Intervention/Image/Imagick/Commands/HeightenCommand.php index 939f8f45..9d10973f 100644 --- a/src/Intervention/Image/Imagick/Commands/HeightenCommand.php +++ b/src/Intervention/Image/Imagick/Commands/HeightenCommand.php @@ -13,11 +13,14 @@ class HeightenCommand extends ResizeCommand public function execute($image) { $height = $this->argument(0)->type('digit')->required()->value(); + $additionalConstraints = $this->argument(1)->type('closure')->value(); $this->arguments[0] = null; $this->arguments[1] = $height; - $this->arguments[2] = function ($constraint) { + $this->arguments[2] = function ($constraint) use ($additionalConstraints) { $constraint->aspectRatio(); + if(is_callable($additionalConstraints)) + $additionalConstraints($constraint); }; return parent::execute($image); diff --git a/src/Intervention/Image/Imagick/Commands/WidenCommand.php b/src/Intervention/Image/Imagick/Commands/WidenCommand.php index 70dbce5e..467fe800 100644 --- a/src/Intervention/Image/Imagick/Commands/WidenCommand.php +++ b/src/Intervention/Image/Imagick/Commands/WidenCommand.php @@ -13,11 +13,14 @@ class WidenCommand extends ResizeCommand public function execute($image) { $width = $this->argument(0)->type('digit')->required()->value(); + $additionalConstraints = $this->argument(1)->type('closure')->value(); $this->arguments[0] = $width; $this->arguments[1] = null; - $this->arguments[2] = function ($constraint) { + $this->arguments[2] = function ($constraint) use ($additionalConstraints) { $constraint->aspectRatio(); + if(is_callable($additionalConstraints)) + $additionalConstraints($constraint); }; return parent::execute($image); diff --git a/tests/GdSystemTest.php b/tests/GdSystemTest.php index 7663e80b..0db3a101 100644 --- a/tests/GdSystemTest.php +++ b/tests/GdSystemTest.php @@ -195,6 +195,19 @@ class GdSystemTest extends PHPUnit_Framework_TestCase $this->assertTransparentPosition($img, 60, 0); } + public function testWidenImageWithConstraint() + { + $img = $this->manager()->make('tests/images/tile.png'); + $img->widen(100, function ($constraint) {$constraint->upsize();}); + $this->assertInstanceOf('Intervention\Image\Image', $img); + $this->assertInternalType('resource', $img->getCore()); + $this->assertInternalType('int', $img->getWidth()); + $this->assertInternalType('int', $img->getHeight()); + $this->assertEquals(16, $img->getWidth()); + $this->assertEquals(16, $img->getHeight()); + $this->assertTransparentPosition($img, 8, 0); + } + public function testHeightenImage() { $img = $this->manager()->make('tests/images/tile.png'); @@ -208,6 +221,19 @@ class GdSystemTest extends PHPUnit_Framework_TestCase $this->assertTransparentPosition($img, 60, 0); } + public function testHeightenImageWithConstraint() + { + $img = $this->manager()->make('tests/images/tile.png'); + $img->heighten(100, function ($constraint) {$constraint->upsize();}); + $this->assertInstanceOf('Intervention\Image\Image', $img); + $this->assertInternalType('resource', $img->getCore()); + $this->assertInternalType('int', $img->getWidth()); + $this->assertInternalType('int', $img->getHeight()); + $this->assertEquals(16, $img->getWidth()); + $this->assertEquals(16, $img->getHeight()); + $this->assertTransparentPosition($img, 8, 0); + } + public function testResizeCanvasCenter() { $img = $this->manager()->make('tests/images/tile.png'); diff --git a/tests/ImagickSystemTest.php b/tests/ImagickSystemTest.php index aaa4dbfa..2c40732b 100644 --- a/tests/ImagickSystemTest.php +++ b/tests/ImagickSystemTest.php @@ -197,6 +197,19 @@ class ImagickSystemTest extends PHPUnit_Framework_TestCase $this->assertTransparentPosition($img, 60, 0); } + public function testWidenImageWithConstraint() + { + $img = $this->manager()->make('tests/images/tile.png'); + $img->widen(100, function ($constraint) {$constraint->upsize();}); + $this->assertInstanceOf('Intervention\Image\Image', $img); + $this->assertInstanceOf('Imagick', $img->getCore()); + $this->assertInternalType('int', $img->getWidth()); + $this->assertInternalType('int', $img->getHeight()); + $this->assertEquals(16, $img->getWidth()); + $this->assertEquals(16, $img->getHeight()); + $this->assertTransparentPosition($img, 8, 0); + } + public function testHeightenImage() { $img = $this->manager()->make('tests/images/tile.png'); @@ -210,6 +223,19 @@ class ImagickSystemTest extends PHPUnit_Framework_TestCase $this->assertTransparentPosition($img, 60, 0); } + public function testHeightenImageWithConstraint() + { + $img = $this->manager()->make('tests/images/tile.png'); + $img->heighten(100, function ($constraint) {$constraint->upsize();}); + $this->assertInstanceOf('Intervention\Image\Image', $img); + $this->assertInstanceOf('Imagick', $img->getCore()); + $this->assertInternalType('int', $img->getWidth()); + $this->assertInternalType('int', $img->getHeight()); + $this->assertEquals(16, $img->getWidth()); + $this->assertEquals(16, $img->getHeight()); + $this->assertTransparentPosition($img, 8, 0); + } + public function testResizeCanvasCenter() { $img = $this->manager()->make('tests/images/tile.png');