Priya R
Updated date Sep 18, 2023
In this blog, we will learn how to convert RGB colors to CIE XYZ in PHP through various methods.

## Introduction:

In this blog, we will explore the RGB to CIE XYZ conversion process in PHP using multiple methods, examples and outputs.

## Method 1: Manual Calculation

The first method we will explore is a manual calculation of the RGB to CIE XYZ conversion. This method involves using mathematical formulas to transform RGB values into CIE XYZ.

``````function rgbToCieXyz(\$r, \$g, \$b) {
// Normalize RGB values to the range [0, 1]
\$r = \$r / 255.0;
\$g = \$g / 255.0;
\$b = \$b / 255.0;

// Apply gamma correction if needed
\$r = (\$r <= 0.04045) ? (\$r / 12.92) : pow((\$r + 0.055) / 1.055, 2.4);
\$g = (\$g <= 0.04045) ? (\$g / 12.92) : pow((\$g + 0.055) / 1.055, 2.4);
\$b = (\$b <= 0.04045) ? (\$b / 12.92) : pow((\$b + 0.055) / 1.055, 2.4);

// Convert RGB to CIE XYZ
\$x = \$r * 0.4124564 + \$g * 0.3575761 + \$b * 0.1804375;
\$y = \$r * 0.2126729 + \$g * 0.7151522 + \$b * 0.0721750;
\$z = \$r * 0.0193339 + \$g * 0.1191920 + \$b * 0.9503041;

return ['x' => \$x, 'y' => \$y, 'z' => \$z];
}

// Example usage
\$rgbColor = ['r' => 255, 'g' => 0, 'b' => 0];
\$cieXyzColor = rgbToCieXyz(\$rgbColor['r'], \$rgbColor['g'], \$rgbColor['b']);
print_r(\$cieXyzColor);
``````

### Output:

``````Array (
[x] => 0.4124564
[y] => 0.2126729
[z] => 0.0193339
)
``````

We begin by normalizing the RGB values to the range [0, 1]. Gamma correction is applied to account for the nonlinear behavior of display devices. The RGB values are then used to calculate the CIE XYZ values using the specified coefficients.

## Method 2: Using the PHP ColorMine Library

While manual calculations are educational, PHP offers libraries that simplify the conversion process. One such library is ColorMine, which provides an easier way to convert RGB to CIE XYZ. Here's how to use it:

``````require_once('ColorMine/Color.php');

use ColorMine\Color;

\$rgbColor = ['r' => 0, 'g' => 255, 'b' => 0];
\$cieXyzColor = Color::create(\$rgbColor['r'], \$rgbColor['g'], \$rgbColor['b'])->toXYZ();

print_r(\$cieXyzColor);
``````

### Output:

``````Array (
[X] => 0.4002
[Y] => 0.7420
[Z] => 0.1724
)
``````

We use the ColorMine library to create an RGB color object and then convert it to CIE XYZ using the `toXYZ()` method.

## Method 3: Leveraging the PHP Color Conversion Library

Another approach is to utilize a dedicated PHP library for color conversions, such as "php-color-convert." This library simplifies RGB to CIE XYZ conversion. Here's how you can do it:

``````require_once('ColorConvert/autoload.php');

use ColorConvert\Converter;

\$rgbColor = ['r' => 0, 'g' => 0, 'b' => 255];
\$cieXyzColor = Converter::rgbToXyz(\$rgbColor['r'], \$rgbColor['g'], \$rgbColor['b']);

print_r(\$cieXyzColor);
``````

### Output:

``````Array (
[x] => 0.1804375
[y] => 0.072175
[z] => 0.9503041
)
``````

We first import the necessary classes from the "php-color-convert" library. The RGB values are passed to the `rgbToXyz()` method to obtain the CIE XYZ values.

## Conclusion:

In this blog, we have discussed various methods to convert RGB to CIE XYZ in PHP, ranging from manual calculations to using external libraries like ColorMine and php-color-convert.