mirror of
https://github.com/Intervention/image.git
synced 2025-08-22 21:42:53 +02:00
Implement AnimationFactory::class & AnimationFactoryInterface::class
This commit is contained in:
44
src/Drivers/Gd/AnimationFactory.php
Normal file
44
src/Drivers/Gd/AnimationFactory.php
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Intervention\Image\Drivers\Gd;
|
||||||
|
|
||||||
|
use Intervention\Image\Exceptions\AnimationException;
|
||||||
|
use Intervention\Image\Exceptions\DecoderException;
|
||||||
|
use Intervention\Image\Image;
|
||||||
|
use Intervention\Image\Interfaces\AnimationFactoryInterface;
|
||||||
|
use Intervention\Image\Interfaces\CoreInterface;
|
||||||
|
use Intervention\Image\Interfaces\DriverInterface;
|
||||||
|
use Intervention\Image\Interfaces\ImageInterface;
|
||||||
|
|
||||||
|
class AnimationFactory implements AnimationFactoryInterface
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
protected DriverInterface $driver,
|
||||||
|
public CoreInterface $core = new Core()
|
||||||
|
) {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws AnimationException
|
||||||
|
* @throws DecoderException
|
||||||
|
*/
|
||||||
|
public function add(mixed $source, float $delay = 1): self
|
||||||
|
{
|
||||||
|
$this->core->add(
|
||||||
|
$this->driver->handleInput($source)->core()->first()->setDelay($delay)
|
||||||
|
);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __invoke(): ImageInterface
|
||||||
|
{
|
||||||
|
return new Image(
|
||||||
|
$this->driver,
|
||||||
|
$this->core
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@@ -6,13 +6,11 @@ namespace Intervention\Image\Drivers\Gd;
|
|||||||
|
|
||||||
use Intervention\Image\Drivers\AbstractDriver;
|
use Intervention\Image\Drivers\AbstractDriver;
|
||||||
use Intervention\Image\Exceptions\DriverException;
|
use Intervention\Image\Exceptions\DriverException;
|
||||||
use Intervention\Image\Exceptions\RuntimeException;
|
|
||||||
use Intervention\Image\Format;
|
use Intervention\Image\Format;
|
||||||
use Intervention\Image\FileExtension;
|
use Intervention\Image\FileExtension;
|
||||||
use Intervention\Image\Image;
|
use Intervention\Image\Image;
|
||||||
use Intervention\Image\Interfaces\ColorProcessorInterface;
|
use Intervention\Image\Interfaces\ColorProcessorInterface;
|
||||||
use Intervention\Image\Interfaces\ColorspaceInterface;
|
use Intervention\Image\Interfaces\ColorspaceInterface;
|
||||||
use Intervention\Image\Interfaces\DriverInterface;
|
|
||||||
use Intervention\Image\Interfaces\FontProcessorInterface;
|
use Intervention\Image\Interfaces\FontProcessorInterface;
|
||||||
use Intervention\Image\Interfaces\ImageInterface;
|
use Intervention\Image\Interfaces\ImageInterface;
|
||||||
use Intervention\Image\MediaType;
|
use Intervention\Image\MediaType;
|
||||||
@@ -72,44 +70,10 @@ class Driver extends AbstractDriver
|
|||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*
|
*
|
||||||
* @see DriverInterface::createAnimation()
|
* @see DriverInterface::createAnimation()
|
||||||
*
|
|
||||||
* @throws RuntimeException
|
|
||||||
*/
|
*/
|
||||||
public function createAnimation(callable $init): ImageInterface
|
public function createAnimation(callable $init): ImageInterface
|
||||||
{
|
{
|
||||||
$animation = new class ($this)
|
$animation = new AnimationFactory($this);
|
||||||
{
|
|
||||||
public function __construct(
|
|
||||||
protected DriverInterface $driver,
|
|
||||||
public Core $core = new Core()
|
|
||||||
) {
|
|
||||||
//
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @throws RuntimeException
|
|
||||||
*/
|
|
||||||
public function add(mixed $source, float $delay = 1): self
|
|
||||||
{
|
|
||||||
$this->core->add(
|
|
||||||
$this->driver->handleInput($source)->core()->first()->setDelay($delay)
|
|
||||||
);
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @throws RuntimeException
|
|
||||||
*/
|
|
||||||
public function __invoke(): ImageInterface
|
|
||||||
{
|
|
||||||
return new Image(
|
|
||||||
$this->driver,
|
|
||||||
$this->core
|
|
||||||
);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
$init($animation);
|
$init($animation);
|
||||||
|
|
||||||
return call_user_func($animation);
|
return call_user_func($animation);
|
||||||
|
45
src/Drivers/Imagick/AnimationFactory.php
Normal file
45
src/Drivers/Imagick/AnimationFactory.php
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Intervention\Image\Drivers\Imagick;
|
||||||
|
|
||||||
|
use Imagick;
|
||||||
|
use Intervention\Image\Exceptions\AnimationException;
|
||||||
|
use Intervention\Image\Exceptions\DecoderException;
|
||||||
|
use Intervention\Image\Image;
|
||||||
|
use Intervention\Image\Interfaces\AnimationFactoryInterface;
|
||||||
|
use Intervention\Image\Interfaces\DriverInterface;
|
||||||
|
use Intervention\Image\Interfaces\ImageInterface;
|
||||||
|
|
||||||
|
class AnimationFactory implements AnimationFactoryInterface
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
protected DriverInterface $driver,
|
||||||
|
public Imagick $imagick = new Imagick()
|
||||||
|
) {
|
||||||
|
$this->imagick->setFormat('gif');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws AnimationException
|
||||||
|
* @throws DecoderException
|
||||||
|
*/
|
||||||
|
public function add(mixed $source, float $delay = 1): self
|
||||||
|
{
|
||||||
|
$native = $this->driver->handleInput($source)->core()->native();
|
||||||
|
$native->setImageDelay(intval(round($delay * 100)));
|
||||||
|
|
||||||
|
$this->imagick->addImage($native);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __invoke(): ImageInterface
|
||||||
|
{
|
||||||
|
return new Image(
|
||||||
|
$this->driver,
|
||||||
|
new Core($this->imagick)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@@ -9,13 +9,11 @@ use ImagickPixel;
|
|||||||
use Intervention\Image\Drivers\AbstractDriver;
|
use Intervention\Image\Drivers\AbstractDriver;
|
||||||
use Intervention\Image\Exceptions\DriverException;
|
use Intervention\Image\Exceptions\DriverException;
|
||||||
use Intervention\Image\Exceptions\NotSupportedException;
|
use Intervention\Image\Exceptions\NotSupportedException;
|
||||||
use Intervention\Image\Exceptions\RuntimeException;
|
|
||||||
use Intervention\Image\Format;
|
use Intervention\Image\Format;
|
||||||
use Intervention\Image\FileExtension;
|
use Intervention\Image\FileExtension;
|
||||||
use Intervention\Image\Image;
|
use Intervention\Image\Image;
|
||||||
use Intervention\Image\Interfaces\ColorProcessorInterface;
|
use Intervention\Image\Interfaces\ColorProcessorInterface;
|
||||||
use Intervention\Image\Interfaces\ColorspaceInterface;
|
use Intervention\Image\Interfaces\ColorspaceInterface;
|
||||||
use Intervention\Image\Interfaces\DriverInterface;
|
|
||||||
use Intervention\Image\Interfaces\FontProcessorInterface;
|
use Intervention\Image\Interfaces\FontProcessorInterface;
|
||||||
use Intervention\Image\Interfaces\ImageInterface;
|
use Intervention\Image\Interfaces\ImageInterface;
|
||||||
use Intervention\Image\MediaType;
|
use Intervention\Image\MediaType;
|
||||||
@@ -72,48 +70,10 @@ class Driver extends AbstractDriver
|
|||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*
|
*
|
||||||
* @see DriverInterface::createAnimation()
|
* @see DriverInterface::createAnimation()
|
||||||
*
|
|
||||||
* @throws RuntimeException
|
|
||||||
*/
|
*/
|
||||||
public function createAnimation(callable $init): ImageInterface
|
public function createAnimation(callable $init): ImageInterface
|
||||||
{
|
{
|
||||||
$imagick = new Imagick();
|
$animation = new AnimationFactory($this);
|
||||||
$imagick->setFormat('gif');
|
|
||||||
|
|
||||||
$animation = new class ($this, $imagick)
|
|
||||||
{
|
|
||||||
public function __construct(
|
|
||||||
protected DriverInterface $driver,
|
|
||||||
public Imagick $imagick
|
|
||||||
) {
|
|
||||||
//
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @throws RuntimeException
|
|
||||||
*/
|
|
||||||
public function add(mixed $source, float $delay = 1): self
|
|
||||||
{
|
|
||||||
$native = $this->driver->handleInput($source)->core()->native();
|
|
||||||
$native->setImageDelay(intval(round($delay * 100)));
|
|
||||||
|
|
||||||
$this->imagick->addImage($native);
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @throws RuntimeException
|
|
||||||
*/
|
|
||||||
public function __invoke(): ImageInterface
|
|
||||||
{
|
|
||||||
return new Image(
|
|
||||||
$this->driver,
|
|
||||||
new Core($this->imagick)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
$init($animation);
|
$init($animation);
|
||||||
|
|
||||||
return call_user_func($animation);
|
return call_user_func($animation);
|
||||||
|
18
src/Interfaces/AnimationFactoryInterface.php
Normal file
18
src/Interfaces/AnimationFactoryInterface.php
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Intervention\Image\Interfaces;
|
||||||
|
|
||||||
|
interface AnimationFactoryInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Resolve image from given source and add it as new animation frame with specific delay
|
||||||
|
*/
|
||||||
|
public function add(mixed $source, float $delay = 1): self;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create image instance
|
||||||
|
*/
|
||||||
|
public function __invoke(): ImageInterface;
|
||||||
|
}
|
Reference in New Issue
Block a user