RedEnginePress logo
RedEnginePress
AlgorithmsLanguagesPlaygroundAbout

Hex to Rgb

R
R
"""
* Author: Cicero Tiago Carneiro Valentim (https://github.com/cicerotcv)
* Description: Convert hexadecimal (#FF2000) color to RGB (rgb(255, 32, 0)).

References:
https://www.w3schools.com/colors/colors_rgb.asp
https://www.w3schools.com/colors/colors_hexadecimal.asp
"""


def hex_to_rgb(hex_color: str) -> str:
    """
    Converts a hexadecimal color code to RGB values.

    Args:
        hex_color (str): A hexadecimal color code, e.g., "#RGB" or "#RRGGBB".

    Returns:
        str: A string representation of a rgb value "rgb(r, g, b)" containing
        three integers.

    Raises:
        ValueError: If the input hex_color is not a valid hexadecimal color code.

    Examples:
    >>> hex_to_rgb("#FF0000")
    'rgb(255, 0, 0)'

    >>> hex_to_rgb("#00FF00")
    'rgb(0, 255, 0)'

    >>> hex_to_rgb("#123")
    'rgb(17, 34, 51)'

    >>> hex_to_rgb("#000000")
    'rgb(0, 0, 0)'

    >>> hex_to_rgb("#FFFFFF")
    'rgb(255, 255, 255)'

    >>> hex_to_rgb("#0088FF")
    'rgb(0, 136, 255)'

    >>> hex_to_rgb("#0032ccAA")
    Traceback (most recent call last):
    ...
    ValueError: Invalid hex color code

    >>> hex_to_rgb("#0032")
    Traceback (most recent call last):
    ...
    ValueError: Invalid hex color code

    Note:
        - The function supports both 6-digit and 3-digit hex color codes.
    """

    hex_color = hex_color.lstrip("#")

    # Check if the input is a valid hex color code
    if not (len(hex_color) == 6 or len(hex_color) == 3):
        raise ValueError("Invalid hex color code")

    # Expand 3-digit hex codes to 6 digits (e.g., "#123" to "#112233")
    if len(hex_color) == 3:
        hex_color = "".join([char * 2 for char in hex_color])

    # Parse the hex values to integers
    red = int(hex_color[0:2], 16)
    green = int(hex_color[2:4], 16)
    blue = int(hex_color[4:6], 16)

    return f"rgb({red}, {green}, {blue})"


if __name__ == "__main__":
    import doctest

    doctest.testmod()