Skip to content

Commit

Permalink
Fix bug in PadModifier (#1408)
Browse files Browse the repository at this point in the history
  • Loading branch information
olivervogel authored Dec 27, 2024
1 parent 1e8f3dc commit 8230387
Show file tree
Hide file tree
Showing 4 changed files with 114 additions and 0 deletions.
15 changes: 15 additions & 0 deletions src/Drivers/Gd/Modifiers/PadModifier.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,21 @@

namespace Intervention\Image\Drivers\Gd\Modifiers;

use Intervention\Image\Interfaces\ImageInterface;
use Intervention\Image\Interfaces\SizeInterface;

class PadModifier extends ContainModifier
{
public function getCropSize(ImageInterface $image): SizeInterface
{
return $image->size()
->containMax(
$this->width,
$this->height
)
->alignPivotTo(
$this->getResizeSize($image),
$this->position
);
}
}
15 changes: 15 additions & 0 deletions src/Drivers/Imagick/Modifiers/PadModifier.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,21 @@

namespace Intervention\Image\Drivers\Imagick\Modifiers;

use Intervention\Image\Interfaces\ImageInterface;
use Intervention\Image\Interfaces\SizeInterface;

class PadModifier extends ContainModifier
{
public function getCropSize(ImageInterface $image): SizeInterface
{
return $image->size()
->containMax(
$this->width,
$this->height
)
->alignPivotTo(
$this->getResizeSize($image),
$this->position
);
}
}
42 changes: 42 additions & 0 deletions tests/Unit/Drivers/Gd/Modifiers/PadModifierTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?php

declare(strict_types=1);

namespace Intervention\Image\Tests\Unit\Drivers\Gd\Modifiers;

use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\RequiresPhpExtension;
use Intervention\Image\Modifiers\PadModifier;
use Intervention\Image\Tests\GdTestCase;

#[RequiresPhpExtension('gd')]
#[CoversClass(\Intervention\Image\Modifiers\PadModifier::class)]
#[CoversClass(\Intervention\Image\Drivers\Gd\Modifiers\PadModifier::class)]
final class PadModifierTest extends GdTestCase
{
public function testModify(): void
{
$image = $this->readTestImage('blue.gif');
$this->assertEquals(16, $image->width());
$this->assertEquals(16, $image->height());
$image->modify(new PadModifier(30, 20, 'f00'));
$this->assertEquals(30, $image->width());
$this->assertEquals(20, $image->height());
$this->assertColor(255, 0, 0, 255, $image->pickColor(0, 0));
$this->assertColor(255, 0, 0, 255, $image->pickColor(0, 19));
$this->assertColor(255, 0, 0, 255, $image->pickColor(29, 0));
$this->assertColor(255, 0, 0, 255, $image->pickColor(29, 19));
$this->assertColor(255, 0, 0, 255, $image->pickColor(6, 2));
$this->assertColor(255, 0, 0, 255, $image->pickColor(7, 1));
$this->assertColor(255, 0, 0, 255, $image->pickColor(6, 17));
$this->assertColor(255, 0, 0, 255, $image->pickColor(7, 18));
$this->assertColor(255, 0, 0, 255, $image->pickColor(23, 1));
$this->assertColor(255, 0, 0, 255, $image->pickColor(23, 2));
$this->assertColor(255, 0, 0, 255, $image->pickColor(23, 17));
$this->assertColor(255, 0, 0, 255, $image->pickColor(23, 18));
$this->assertColor(100, 100, 255, 255, $image->pickColor(7, 2));
$this->assertColor(100, 100, 255, 255, $image->pickColor(22, 2));
$this->assertColor(100, 100, 255, 255, $image->pickColor(7, 17));
$this->assertColor(100, 100, 255, 255, $image->pickColor(22, 17));
}
}
42 changes: 42 additions & 0 deletions tests/Unit/Drivers/Imagick/Modifiers/PadModifierTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?php

declare(strict_types=1);

namespace Intervention\Image\Tests\Unit\Drivers\Imagick\Modifiers;

use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\RequiresPhpExtension;
use Intervention\Image\Modifiers\PadModifier;
use Intervention\Image\Tests\ImagickTestCase;

#[RequiresPhpExtension('imagick')]
#[CoversClass(\Intervention\Image\Modifiers\PadModifier::class)]
#[CoversClass(\Intervention\Image\Drivers\Imagick\Modifiers\PadModifier::class)]
final class PadModifierTest extends ImagickTestCase
{
public function testModify(): void
{
$image = $this->readTestImage('blue.gif');
$this->assertEquals(16, $image->width());
$this->assertEquals(16, $image->height());
$image->modify(new PadModifier(30, 20, 'f00'));
$this->assertEquals(30, $image->width());
$this->assertEquals(20, $image->height());
$this->assertColor(255, 0, 0, 255, $image->pickColor(0, 0));
$this->assertColor(255, 0, 0, 255, $image->pickColor(0, 19));
$this->assertColor(255, 0, 0, 255, $image->pickColor(29, 0));
$this->assertColor(255, 0, 0, 255, $image->pickColor(29, 19));
$this->assertColor(255, 0, 0, 255, $image->pickColor(6, 2));
$this->assertColor(255, 0, 0, 255, $image->pickColor(7, 1));
$this->assertColor(255, 0, 0, 255, $image->pickColor(6, 17));
$this->assertColor(255, 0, 0, 255, $image->pickColor(7, 18));
$this->assertColor(255, 0, 0, 255, $image->pickColor(23, 1));
$this->assertColor(255, 0, 0, 255, $image->pickColor(23, 2));
$this->assertColor(255, 0, 0, 255, $image->pickColor(23, 17));
$this->assertColor(255, 0, 0, 255, $image->pickColor(23, 18));
$this->assertColor(100, 100, 255, 255, $image->pickColor(7, 2));
$this->assertColor(100, 100, 255, 255, $image->pickColor(22, 2));
$this->assertColor(100, 100, 255, 255, $image->pickColor(7, 17));
$this->assertColor(100, 100, 255, 255, $image->pickColor(22, 17));
}
}

0 comments on commit 8230387

Please sign in to comment.