1
0
mirror of https://github.com/Intervention/image.git synced 2025-08-28 08:09:54 +02:00

Added modifiers to mirror images horizontally & vertically

This commit is contained in:
Oliver Vogel
2022-02-10 16:08:47 +00:00
parent a7a27826e4
commit 51e4fdb7e6
7 changed files with 164 additions and 0 deletions

View File

@@ -153,6 +153,30 @@ abstract class AbstractImage
);
}
/**
* Creates a vertical mirror image
*
* @return ImageInterface
*/
public function flip(): ImageInterface
{
return $this->modify(
$this->resolveDriverClass('Modifiers\FlipModifier')
);
}
/**
* Creates a horizontal mirror image
*
* @return ImageInterface
*/
public function flop(): ImageInterface
{
return $this->modify(
$this->resolveDriverClass('Modifiers\FlopModifier')
);
}
public function place($element, string $position = 'top-left', int $offset_x = 0, int $offset_y = 0): ImageInterface
{
return $this->modify(

View File

@@ -0,0 +1,18 @@
<?php
namespace Intervention\Image\Drivers\Gd\Modifiers;
use Intervention\Image\Interfaces\ImageInterface;
use Intervention\Image\Interfaces\ModifierInterface;
class FlipModifier implements ModifierInterface
{
public function apply(ImageInterface $image): ImageInterface
{
foreach ($image as $frame) {
imageflip($frame->getCore(), IMG_FLIP_VERTICAL);
}
return $image;
}
}

View File

@@ -0,0 +1,18 @@
<?php
namespace Intervention\Image\Drivers\Gd\Modifiers;
use Intervention\Image\Interfaces\ImageInterface;
use Intervention\Image\Interfaces\ModifierInterface;
class FlopModifier implements ModifierInterface
{
public function apply(ImageInterface $image): ImageInterface
{
foreach ($image as $frame) {
imageflip($frame->getCore(), IMG_FLIP_HORIZONTAL);
}
return $image;
}
}

View File

@@ -0,0 +1,18 @@
<?php
namespace Intervention\Image\Drivers\Imagick\Modifiers;
use Intervention\Image\Interfaces\ImageInterface;
use Intervention\Image\Interfaces\ModifierInterface;
class FlipModifier implements ModifierInterface
{
public function apply(ImageInterface $image): ImageInterface
{
foreach ($image as $frame) {
$frame->getCore()->flipImage();
}
return $image;
}
}

View File

@@ -0,0 +1,18 @@
<?php
namespace Intervention\Image\Drivers\Imagick\Modifiers;
use Intervention\Image\Interfaces\ImageInterface;
use Intervention\Image\Interfaces\ModifierInterface;
class FlopModifier implements ModifierInterface
{
public function apply(ImageInterface $image): ImageInterface
{
foreach ($image as $frame) {
$frame->getCore()->flopImage();
}
return $image;
}
}

View File

@@ -0,0 +1,34 @@
<?php
namespace Intervention\Image\Tests\Drivers\Gd\Modifiers;
use Intervention\Image\Drivers\Gd\Modifiers\FlipModifier;
use Intervention\Image\Drivers\Gd\Modifiers\FlopModifier;
use Intervention\Image\Tests\TestCase;
use Intervention\Image\Tests\Traits\CanCreateGdTestImage;
/**
* @requires extension gd
* @covers \Intervention\Image\Drivers\Gd\Modifiers\FlipModifier
* @covers \Intervention\Image\Drivers\Gd\Modifiers\FlopModifier
*/
class FlipFlopModifierTest extends TestCase
{
use CanCreateGdTestImage;
public function testFlipImage(): void
{
$image = $this->createTestImage('tile.png');
$this->assertEquals('b4e000', $image->pickColor(0, 0)->toHex());
$image->modify(new FlipModifier());
$this->assertEquals('000000', $image->pickColor(0, 0)->toHex());
}
public function testFlopImage(): void
{
$image = $this->createTestImage('tile.png');
$this->assertEquals('b4e000', $image->pickColor(0, 0)->toHex());
$image->modify(new FlopModifier());
$this->assertEquals('000000', $image->pickColor(0, 0)->toHex());
}
}

View File

@@ -0,0 +1,34 @@
<?php
namespace Intervention\Image\Tests\Drivers\Imagick\Modifiers;
use Intervention\Image\Drivers\Imagick\Modifiers\FlipModifier;
use Intervention\Image\Drivers\Imagick\Modifiers\FlopModifier;
use Intervention\Image\Tests\TestCase;
use Intervention\Image\Tests\Traits\CanCreateImagickTestImage;
/**
* @requires extension imagick
* @covers \Intervention\Image\Drivers\Imagick\Modifiers\FlipModifier
* @covers \Intervention\Image\Drivers\Imagick\Modifiers\FlopModifier
*/
class FlipFlopModifierTest extends TestCase
{
use CanCreateImagickTestImage;
public function testFlipImage(): void
{
$image = $this->createTestImage('tile.png');
$this->assertEquals('b4e000', $image->pickColor(0, 0)->toHex());
$image->modify(new FlipModifier());
$this->assertEquals('000000', $image->pickColor(0, 0)->toHex());
}
public function testFlopImage(): void
{
$image = $this->createTestImage('tile.png');
$this->assertEquals('b4e000', $image->pickColor(0, 0)->toHex());
$image->modify(new FlopModifier());
$this->assertEquals('000000', $image->pickColor(0, 0)->toHex());
}
}