mirror of
https://github.com/Intervention/image.git
synced 2025-08-20 20:51:20 +02:00
Implement ColorInterface::create(mixed ...$input)
This commit is contained in:
@@ -1,6 +1,12 @@
|
|||||||
## New Features
|
## New Features
|
||||||
|
|
||||||
- ImageInterface::version()
|
- ImageInterface::version()
|
||||||
|
- ColorInterface::create() now accepts functional string color formats as well as single channel values
|
||||||
|
- ImageManagerInterface::readPath()
|
||||||
|
- ImageManagerInterface::readBinary()
|
||||||
|
- ImageManagerInterface::readBase64()
|
||||||
|
- ImageManagerInterface::readSplFileInfo()
|
||||||
|
- ImageManagerInterface::readDataUri()
|
||||||
|
|
||||||
## API Changes
|
## API Changes
|
||||||
|
|
||||||
|
@@ -10,6 +10,7 @@ use Intervention\Image\Colors\Cmyk\Channels\Magenta;
|
|||||||
use Intervention\Image\Colors\Cmyk\Channels\Yellow;
|
use Intervention\Image\Colors\Cmyk\Channels\Yellow;
|
||||||
use Intervention\Image\Colors\Cmyk\Channels\Key;
|
use Intervention\Image\Colors\Cmyk\Channels\Key;
|
||||||
use Intervention\Image\Colors\Rgb\Colorspace as RgbColorspace;
|
use Intervention\Image\Colors\Rgb\Colorspace as RgbColorspace;
|
||||||
|
use Intervention\Image\Exceptions\DecoderException;
|
||||||
use Intervention\Image\InputHandler;
|
use Intervention\Image\InputHandler;
|
||||||
use Intervention\Image\Interfaces\ColorChannelInterface;
|
use Intervention\Image\Interfaces\ColorChannelInterface;
|
||||||
use Intervention\Image\Interfaces\ColorInterface;
|
use Intervention\Image\Interfaces\ColorInterface;
|
||||||
@@ -38,8 +39,20 @@ class Color extends AbstractColor
|
|||||||
*
|
*
|
||||||
* @see ColorInterface::create()
|
* @see ColorInterface::create()
|
||||||
*/
|
*/
|
||||||
public static function create(mixed $input): ColorInterface
|
public static function create(mixed ...$input): ColorInterface
|
||||||
{
|
{
|
||||||
|
$input = match (count($input)) {
|
||||||
|
1 => $input[0],
|
||||||
|
4 => $input,
|
||||||
|
default => throw new DecoderException(
|
||||||
|
'Too few arguments to create color, ' . count($input) . ' passed and 1 or 4 expected.',
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
if (is_array($input)) {
|
||||||
|
return new self(...$input);
|
||||||
|
}
|
||||||
|
|
||||||
return InputHandler::withDecoders([
|
return InputHandler::withDecoders([
|
||||||
Decoders\StringColorDecoder::class,
|
Decoders\StringColorDecoder::class,
|
||||||
])->handle($input);
|
])->handle($input);
|
||||||
|
@@ -9,6 +9,7 @@ use Intervention\Image\Colors\Hsl\Channels\Hue;
|
|||||||
use Intervention\Image\Colors\Hsl\Channels\Luminance;
|
use Intervention\Image\Colors\Hsl\Channels\Luminance;
|
||||||
use Intervention\Image\Colors\Hsl\Channels\Saturation;
|
use Intervention\Image\Colors\Hsl\Channels\Saturation;
|
||||||
use Intervention\Image\Colors\Rgb\Colorspace as RgbColorspace;
|
use Intervention\Image\Colors\Rgb\Colorspace as RgbColorspace;
|
||||||
|
use Intervention\Image\Exceptions\DecoderException;
|
||||||
use Intervention\Image\InputHandler;
|
use Intervention\Image\InputHandler;
|
||||||
use Intervention\Image\Interfaces\ColorChannelInterface;
|
use Intervention\Image\Interfaces\ColorChannelInterface;
|
||||||
use Intervention\Image\Interfaces\ColorInterface;
|
use Intervention\Image\Interfaces\ColorInterface;
|
||||||
@@ -46,8 +47,20 @@ class Color extends AbstractColor
|
|||||||
*
|
*
|
||||||
* @see ColorInterface::create()
|
* @see ColorInterface::create()
|
||||||
*/
|
*/
|
||||||
public static function create(mixed $input): ColorInterface
|
public static function create(mixed ...$input): ColorInterface
|
||||||
{
|
{
|
||||||
|
$input = match (count($input)) {
|
||||||
|
1 => $input[0],
|
||||||
|
3 => $input,
|
||||||
|
default => throw new DecoderException(
|
||||||
|
'Too few arguments to create color, ' . count($input) . ' passed and 1 or 3 expected.',
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
if (is_array($input)) {
|
||||||
|
return new self(...$input);
|
||||||
|
}
|
||||||
|
|
||||||
return InputHandler::withDecoders([
|
return InputHandler::withDecoders([
|
||||||
Decoders\StringColorDecoder::class,
|
Decoders\StringColorDecoder::class,
|
||||||
])->handle($input);
|
])->handle($input);
|
||||||
|
@@ -9,6 +9,7 @@ use Intervention\Image\Colors\Hsv\Channels\Hue;
|
|||||||
use Intervention\Image\Colors\Hsv\Channels\Saturation;
|
use Intervention\Image\Colors\Hsv\Channels\Saturation;
|
||||||
use Intervention\Image\Colors\Hsv\Channels\Value;
|
use Intervention\Image\Colors\Hsv\Channels\Value;
|
||||||
use Intervention\Image\Colors\Rgb\Colorspace as RgbColorspace;
|
use Intervention\Image\Colors\Rgb\Colorspace as RgbColorspace;
|
||||||
|
use Intervention\Image\Exceptions\DecoderException;
|
||||||
use Intervention\Image\InputHandler;
|
use Intervention\Image\InputHandler;
|
||||||
use Intervention\Image\Interfaces\ColorChannelInterface;
|
use Intervention\Image\Interfaces\ColorChannelInterface;
|
||||||
use Intervention\Image\Interfaces\ColorInterface;
|
use Intervention\Image\Interfaces\ColorInterface;
|
||||||
@@ -46,8 +47,20 @@ class Color extends AbstractColor
|
|||||||
*
|
*
|
||||||
* @see ColorInterface::create()
|
* @see ColorInterface::create()
|
||||||
*/
|
*/
|
||||||
public static function create(mixed $input): ColorInterface
|
public static function create(mixed ...$input): ColorInterface
|
||||||
{
|
{
|
||||||
|
$input = match (count($input)) {
|
||||||
|
1 => $input[0],
|
||||||
|
3 => $input,
|
||||||
|
default => throw new DecoderException(
|
||||||
|
'Too few arguments to create color, ' . count($input) . ' passed and 1 or 3 expected.',
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
if (is_array($input)) {
|
||||||
|
return new self(...$input);
|
||||||
|
}
|
||||||
|
|
||||||
return InputHandler::withDecoders([
|
return InputHandler::withDecoders([
|
||||||
Decoders\StringColorDecoder::class,
|
Decoders\StringColorDecoder::class,
|
||||||
])->handle($input);
|
])->handle($input);
|
||||||
|
@@ -9,6 +9,7 @@ use Intervention\Image\Colors\Rgb\Channels\Blue;
|
|||||||
use Intervention\Image\Colors\Rgb\Channels\Green;
|
use Intervention\Image\Colors\Rgb\Channels\Green;
|
||||||
use Intervention\Image\Colors\Rgb\Channels\Red;
|
use Intervention\Image\Colors\Rgb\Channels\Red;
|
||||||
use Intervention\Image\Colors\Rgb\Channels\Alpha;
|
use Intervention\Image\Colors\Rgb\Channels\Alpha;
|
||||||
|
use Intervention\Image\Exceptions\DecoderException;
|
||||||
use Intervention\Image\InputHandler;
|
use Intervention\Image\InputHandler;
|
||||||
use Intervention\Image\Interfaces\ColorChannelInterface;
|
use Intervention\Image\Interfaces\ColorChannelInterface;
|
||||||
use Intervention\Image\Interfaces\ColorInterface;
|
use Intervention\Image\Interfaces\ColorInterface;
|
||||||
@@ -47,8 +48,20 @@ class Color extends AbstractColor
|
|||||||
*
|
*
|
||||||
* @see ColorInterface::create()
|
* @see ColorInterface::create()
|
||||||
*/
|
*/
|
||||||
public static function create(mixed $input): ColorInterface
|
public static function create(mixed ...$input): ColorInterface
|
||||||
{
|
{
|
||||||
|
$input = match (count($input)) {
|
||||||
|
1 => $input[0],
|
||||||
|
3, 4 => $input,
|
||||||
|
default => throw new DecoderException(
|
||||||
|
'Too few arguments to create color, ' . count($input) . ' passed and 1, 3, or 4 expected.',
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
if (is_array($input)) {
|
||||||
|
return new self(...$input);
|
||||||
|
}
|
||||||
|
|
||||||
return InputHandler::withDecoders([
|
return InputHandler::withDecoders([
|
||||||
Decoders\HexColorDecoder::class,
|
Decoders\HexColorDecoder::class,
|
||||||
Decoders\StringColorDecoder::class,
|
Decoders\StringColorDecoder::class,
|
||||||
|
@@ -15,7 +15,7 @@ interface ColorInterface
|
|||||||
*
|
*
|
||||||
* @throws RuntimeException
|
* @throws RuntimeException
|
||||||
*/
|
*/
|
||||||
public static function create(mixed $input): self;
|
public static function create(mixed ...$input): self;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return colorspace of current color
|
* Return colorspace of current color
|
||||||
|
@@ -27,6 +27,9 @@ final class ColorTest extends BaseTestCase
|
|||||||
{
|
{
|
||||||
$color = Color::create('cmyk(10, 20, 30, 40)');
|
$color = Color::create('cmyk(10, 20, 30, 40)');
|
||||||
$this->assertInstanceOf(Color::class, $color);
|
$this->assertInstanceOf(Color::class, $color);
|
||||||
|
|
||||||
|
$color = Color::create(10, 20, 30, 40);
|
||||||
|
$this->assertInstanceOf(Color::class, $color);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testColorspace(): void
|
public function testColorspace(): void
|
||||||
|
@@ -26,6 +26,9 @@ final class ColorTest extends BaseTestCase
|
|||||||
{
|
{
|
||||||
$color = Color::create('hsl(10, 20, 30)');
|
$color = Color::create('hsl(10, 20, 30)');
|
||||||
$this->assertInstanceOf(Color::class, $color);
|
$this->assertInstanceOf(Color::class, $color);
|
||||||
|
|
||||||
|
$color = Color::create(10, 20, 30);
|
||||||
|
$this->assertInstanceOf(Color::class, $color);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testColorspace(): void
|
public function testColorspace(): void
|
||||||
|
@@ -26,6 +26,9 @@ final class ColorTest extends BaseTestCase
|
|||||||
{
|
{
|
||||||
$color = Color::create('hsv(10, 20, 30)');
|
$color = Color::create('hsv(10, 20, 30)');
|
||||||
$this->assertInstanceOf(Color::class, $color);
|
$this->assertInstanceOf(Color::class, $color);
|
||||||
|
|
||||||
|
$color = Color::create(10, 20, 30);
|
||||||
|
$this->assertInstanceOf(Color::class, $color);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testColorspace(): void
|
public function testColorspace(): void
|
||||||
|
@@ -36,6 +36,10 @@ final class ColorTest extends BaseTestCase
|
|||||||
$color = Color::create('rgba(10, 20, 30, .2)');
|
$color = Color::create('rgba(10, 20, 30, .2)');
|
||||||
$this->assertInstanceOf(Color::class, $color);
|
$this->assertInstanceOf(Color::class, $color);
|
||||||
$this->assertEquals([10, 20, 30, 51], $color->toArray());
|
$this->assertEquals([10, 20, 30, 51], $color->toArray());
|
||||||
|
|
||||||
|
$color = Color::create(10, 20, 30, 51);
|
||||||
|
$this->assertInstanceOf(Color::class, $color);
|
||||||
|
$this->assertEquals([10, 20, 30, 51], $color->toArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testColorspace(): void
|
public function testColorspace(): void
|
||||||
|
Reference in New Issue
Block a user