Priya R
Updated date Oct 27, 2023
In this blog, we will explore the fascinating world of color spaces as we guide you through multiple methods for converting YCbCr to RGB using PHP.

## Introduction:

Color is a fundamental aspect of visual perception, and understanding how different color spaces work is crucial in various fields, including image processing and computer vision. One such color space is YCbCr, which separates the brightness (luminance) and color information. In this blog, we will explore the conversion of YCbCr to RGB using PHP.

## Method 1: Manual Conversion with Formulas

The YCbCr color space consists of three components: Y (luminance), Cb (chrominance blue), and Cr (chrominance red). To convert YCbCr to RGB manually, we can use the following formulas:

``````function ycbcr_to_rgb(\$y, \$cb, \$cr) {
\$r = \$y + 1.402 * (\$cr - 128);
\$g = \$y - 0.344136 * (\$cb - 128) - 0.714136 * (\$cr - 128);
\$b = \$y + 1.772 * (\$cb - 128);

// Clamp values to the valid range [0, 255]
\$r = max(0, min(255, \$r));
\$g = max(0, min(255, \$g));
\$b = max(0, min(255, \$b));

return [\$r, \$g, \$b];
}
``````

### Output:

Let's test the above function with Y = 150, Cb = 120, and Cr = 200.

``````list(\$r, \$g, \$b) = ycbcr_to_rgb(150, 120, 200);
echo "RGB Output: (\$r, \$g, \$b)";
``````

The output should be something like: `RGB Output: (189.188, 116.465, 242.552)`

## Method 2: Utilizing Built-in Functions

PHP provides built-in functions for working with color spaces. We can leverage the `imagecreatefromjpeg` function to create an image resource from a JPEG file, and then use `imagecolorat` to get the RGB values at a specific pixel.

``````function ycbcr_to_rgb_builtin(\$y, \$cb, \$cr) {
// Create an image with a single pixel
\$image = imagecreatetruecolor(1, 1);
\$color = imagecolorallocate(\$image, \$y, \$cb, \$cr);

// Get RGB values
\$rgb = imagecolorsforindex(\$image, \$color);

return [\$rgb['red'], \$rgb['green'], \$rgb['blue']];
}
``````

### Output:

Testing the built-in function with Y = 150, Cb = 120, and Cr = 200:

``````list(\$r, \$g, \$b) = ycbcr_to_rgb_builtin(150, 120, 200);
echo "RGB Output (Built-in): (\$r, \$g, \$b)";
``````

The output should match the previous manual method's output.

## Method 3: Utilizing the GD Extension

PHP's GD extension offers a straightforward way to manipulate images and colors. We can use `imagecolorset` to set the RGB values directly.

``````function ycbcr_to_rgb_gd(\$y, \$cb, \$cr) {
// Create an image with a single pixel
\$image = imagecreatetruecolor(1, 1);

// Convert YCbCr to RGB
\$r = \$y + 1.402 * (\$cr - 128);
\$g = \$y - 0.344136 * (\$cb - 128) - 0.714136 * (\$cr - 128);
\$b = \$y + 1.772 * (\$cb - 128);

// Clamp values to the valid range [0, 255]
\$r = max(0, min(255, \$r));
\$g = max(0, min(255, \$g));
\$b = max(0, min(255, \$b));

// Set RGB values
\$color = imagecolorallocate(\$image, \$r, \$g, \$b);

// Get RGB values
\$rgb = imagecolorsforindex(\$image, \$color);

return [\$rgb['red'], \$rgb['green'], \$rgb['blue']];
}
``````

### Output:

Testing the GD extension method with Y = 150, Cb = 120, and Cr = 200:

``````list(\$r, \$g, \$b) = ycbcr_to_rgb_gd(150, 120, 200);
echo "RGB Output (GD Extension): (\$r, \$g, \$b)";
``````

## Conclusion:

In this blog, we have explored different methods for converting YCbCr to RGB in PHP. We have started with manual conversion using formulas, then moved on to utilizing PHP's built-in functions and the GD extension.