Search code examples
phphexrgbrgba

RGBA format HEX into RGB format HEX? PHP


I want to convert back and forth between RGBA-formated HEX colors (like0xFF0000FF) and RGB-formated HEX colors (like 0xFF0000) in PHP.

How can I do this?


Solution

  • How about these:

    function rgbaToRgb ($rgba, $blend = 0xFFFFFF) {
        return (($rgba >> 8)*($rgba & 0xFF)/0xFF) * ($blend / 0xFFFFFF);
    }
    
    function rgbToRgba ($rgb) {
        return ($rgb << 8) | 0xFF;
    }
    

    $blend in the first is effectively a background color to blend with.

    Edit: fix due to not enough space in ints ruining RGBA. RGBA is now handled as a four part array. RGB remains a number.:

    function rgbaToRgb ($rgba, $blend = 0xFFFFFF) {
    $rbg = array($rgba[0] * $rgba[3]/0xFF + ($blend>>16) * (0xFF-$rgba[3])/0xFF, $rgba[1] * $rgba[3]/0xFF + (($blend>>8)&0xFF)*(0xFF-$rgba[3])/0xFF, $rgba[2] * $rgba[3]/0xFF + ($blend&0xFF) * (0xFF-$rgba[3])/0xFF);
    return ($rbg[0]<<16) + ($rbg[1]<<8) + $rbg[2];
    }
    
    function rgbToRgba ($rgb) {
        return array($rgb >> 16, ($rgb >> 8) & 0xFF, $rgb & 0xFF, 0xFF);
    }