Add CIE XYZ classes for D50/D65 whitespace before clean up
This commit is contained in:
128
www/lib/CoreLibs/Convert/Color/Coordinates/XYZD50.php
Normal file
128
www/lib/CoreLibs/Convert/Color/Coordinates/XYZD50.php
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTHOR: Clemens Schwaighofer
|
||||||
|
* CREATED: 2024/11/11
|
||||||
|
* DESCRIPTION:
|
||||||
|
* Color Coordinate: XYZ (Cie)
|
||||||
|
* Note, this is only for the D50 whitepoint
|
||||||
|
* https://en.wikipedia.org/wiki/CIE_1931_color_space#Construction_of_the_CIE_XYZ_color_space_from_the_Wright%E2%80%93Guild_data
|
||||||
|
* https://en.wikipedia.org/wiki/Standard_illuminant#Illuminant_series_D
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace CoreLibs\Convert\Color\Coordinates;
|
||||||
|
|
||||||
|
class XYZD50
|
||||||
|
{
|
||||||
|
/** @var array<string> allowed colorspaces */
|
||||||
|
private const COLORSPACES = ['CIEXYZ'];
|
||||||
|
|
||||||
|
/** @var float X coordinate */
|
||||||
|
private float $X = 0.0;
|
||||||
|
/** @var float Y coordinate (Luminance) */
|
||||||
|
private float $Y = 0.0;
|
||||||
|
/** @var float Z coordinate (blue) */
|
||||||
|
private float $Z = 0.0;
|
||||||
|
|
||||||
|
/** @var string color space: either ok or cie */
|
||||||
|
private string $colorspace = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Color Coordinate Lch
|
||||||
|
* for oklch
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set from array
|
||||||
|
* where 0: X, 1: Y, 2: Z
|
||||||
|
*
|
||||||
|
* @param array{0:float,1:float,2:float} $colors
|
||||||
|
* @param string $colorspace
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
public static function __constructFromArray(array $colors, string $colorspace = 'CieXYZ'): self
|
||||||
|
{
|
||||||
|
return (new XYZD50())->setColorspace($colorspace)->setFromArray($colors);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set color
|
||||||
|
*
|
||||||
|
* @param string $name
|
||||||
|
* @param float $value
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __set(string $name, float $value): void
|
||||||
|
{
|
||||||
|
if (!property_exists($this, $name)) {
|
||||||
|
throw new \ErrorException('Creation of dynamic property is not allowed', 0);
|
||||||
|
}
|
||||||
|
// if ($value < 0 || $value > 255) {
|
||||||
|
// throw new \LengthException('Argument value ' . $value . ' for color ' . $name
|
||||||
|
// . ' is not in the range of 0 to 255', 1);
|
||||||
|
// }
|
||||||
|
$this->$name = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get color
|
||||||
|
*
|
||||||
|
* @param string $name
|
||||||
|
* @return float
|
||||||
|
*/
|
||||||
|
public function __get(string $name): float
|
||||||
|
{
|
||||||
|
if (!property_exists($this, $name)) {
|
||||||
|
throw new \ErrorException('Creation of dynamic property is not allowed', 0);
|
||||||
|
}
|
||||||
|
return $this->$name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set the colorspace
|
||||||
|
*
|
||||||
|
* @param string $colorspace
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
private function setColorspace(string $colorspace): self
|
||||||
|
{
|
||||||
|
if (!in_array($colorspace, $this::COLORSPACES)) {
|
||||||
|
throw new \InvalidArgumentException('Not allowed colorspace', 0);
|
||||||
|
}
|
||||||
|
$this->colorspace = $colorspace;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the color as array
|
||||||
|
* where 0: X, 1: Y, 2: Z
|
||||||
|
*
|
||||||
|
* @return array{0:float,1:float,2:float}
|
||||||
|
*/
|
||||||
|
public function returnAsArray(): array
|
||||||
|
{
|
||||||
|
return [$this->X, $this->Y, $this->Z];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set color as array
|
||||||
|
* where 0: X, 1: Y, 2: Z
|
||||||
|
*
|
||||||
|
* @param array{0:float,1:float,2:float} $colors
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
public function setFromArray(array $colors): self
|
||||||
|
{
|
||||||
|
$this->__set('X', $colors[0]);
|
||||||
|
$this->__set('Y', $colors[1]);
|
||||||
|
$this->__set('Z', $colors[2]);
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// __END__
|
||||||
@@ -16,10 +16,19 @@ namespace CoreLibs\Convert\Color\Coordinates;
|
|||||||
|
|
||||||
class XYZD65
|
class XYZD65
|
||||||
{
|
{
|
||||||
|
/** @var array<string> allowed colorspaces */
|
||||||
|
private const COLORSPACES = ['XYZ'];
|
||||||
|
|
||||||
|
/** @var float X coordinate */
|
||||||
private float $X = 0.0;
|
private float $X = 0.0;
|
||||||
|
/** @var float Y coordinate */
|
||||||
private float $Y = 0.0;
|
private float $Y = 0.0;
|
||||||
|
/** @var float Y coordinate */
|
||||||
private float $Z = 0.0;
|
private float $Z = 0.0;
|
||||||
|
|
||||||
|
/** @var string color space: either ok or cie */
|
||||||
|
private string $colorspace = '';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Color Coordinate Lch
|
* Color Coordinate Lch
|
||||||
* for oklch
|
* for oklch
|
||||||
@@ -28,29 +37,17 @@ class XYZD65
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* set with each value as parameters
|
|
||||||
*
|
|
||||||
* @param float $X
|
|
||||||
* @param float $Y
|
|
||||||
* @param float $Z
|
|
||||||
* @return self
|
|
||||||
*/
|
|
||||||
public static function __constructFromSet(float $X, float $Y, float $Z): self
|
|
||||||
{
|
|
||||||
return (new XYZD65())->setAsArray([$X, $Y, $Z]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* set from array
|
* set from array
|
||||||
* where 0: X, 1: Y, 2: Z
|
* where 0: X, 1: Y, 2: Z
|
||||||
*
|
*
|
||||||
* @param array{0:float,1:float,2:float} $xyzD65
|
* @param array{0:float,1:float,2:float} $colors
|
||||||
|
* @param string $colorspace
|
||||||
* @return self
|
* @return self
|
||||||
*/
|
*/
|
||||||
public static function __constructFromArray(array $xyzD65): self
|
public static function __constructFromArray(array $colors, string $colorspace = 'XYZ'): self
|
||||||
{
|
{
|
||||||
return (new XYZD65())->setAsArray($xyzD65);
|
return (new XYZD65())->setColorspace($colorspace)->setFromArray($colors);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -86,6 +83,21 @@ class XYZD65
|
|||||||
return $this->$name;
|
return $this->$name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set the colorspace
|
||||||
|
*
|
||||||
|
* @param string $colorspace
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
private function setColorspace(string $colorspace): self
|
||||||
|
{
|
||||||
|
if (!in_array($colorspace, $this::COLORSPACES)) {
|
||||||
|
throw new \InvalidArgumentException('Not allowed colorspace', 0);
|
||||||
|
}
|
||||||
|
$this->colorspace = $colorspace;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the color as array
|
* Returns the color as array
|
||||||
* where 0: X, 1: Y, 2: Z
|
* where 0: X, 1: Y, 2: Z
|
||||||
@@ -101,14 +113,14 @@ class XYZD65
|
|||||||
* set color as array
|
* set color as array
|
||||||
* where 0: X, 1: Y, 2: Z
|
* where 0: X, 1: Y, 2: Z
|
||||||
*
|
*
|
||||||
* @param array{0:float,1:float,2:float} $xyzD65
|
* @param array{0:float,1:float,2:float} $colors
|
||||||
* @return self
|
* @return self
|
||||||
*/
|
*/
|
||||||
public function setAsArray(array $xyzD65): self
|
public function setFromArray(array $colors): self
|
||||||
{
|
{
|
||||||
$this->__set('X', $xyzD65[0]);
|
$this->__set('X', $colors[0]);
|
||||||
$this->__set('Y', $xyzD65[1]);
|
$this->__set('Y', $colors[1]);
|
||||||
$this->__set('Z', $xyzD65[2]);
|
$this->__set('Z', $colors[2]);
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user