1 <?php 2 3 declare(strict_types=1); 4 5 namespace OpenSpout\Common\Entity\Style; 6 7 use OpenSpout\Common\Exception\InvalidColorException; 8 9 /** 10 * This class provides constants and functions to work with colors. 11 */ 12 final class Color 13 { 14 /** 15 * Standard colors - based on Office Online. 16 */ 17 public const BLACK = '000000'; 18 public const WHITE = 'FFFFFF'; 19 public const RED = 'FF0000'; 20 public const DARK_RED = 'C00000'; 21 public const ORANGE = 'FFC000'; 22 public const YELLOW = 'FFFF00'; 23 public const LIGHT_GREEN = '92D040'; 24 public const GREEN = '00B050'; 25 public const LIGHT_BLUE = '00B0E0'; 26 public const BLUE = '0070C0'; 27 public const DARK_BLUE = '002060'; 28 public const PURPLE = '7030A0'; 29 30 /** 31 * Returns an RGB color from R, G and B values. 32 * 33 * @param int $red Red component, 0 - 255 34 * @param int $green Green component, 0 - 255 35 * @param int $blue Blue component, 0 - 255 36 * 37 * @return string RGB color 38 */ 39 public static function rgb(int $red, int $green, int $blue): string 40 { 41 self::throwIfInvalidColorComponentValue($red); 42 self::throwIfInvalidColorComponentValue($green); 43 self::throwIfInvalidColorComponentValue($blue); 44 45 return strtoupper( 46 self::convertColorComponentToHex($red). 47 self::convertColorComponentToHex($green). 48 self::convertColorComponentToHex($blue) 49 ); 50 } 51 52 /** 53 * Returns the ARGB color of the given RGB color, 54 * assuming that alpha value is always 1. 55 * 56 * @param string $rgbColor RGB color like "FF08B2" 57 * 58 * @return string ARGB color 59 */ 60 public static function toARGB(string $rgbColor): string 61 { 62 return 'FF'.$rgbColor; 63 } 64 65 /** 66 * Throws an exception is the color component value is outside of bounds (0 - 255). 67 * 68 * @throws \OpenSpout\Common\Exception\InvalidColorException 69 */ 70 private static function throwIfInvalidColorComponentValue(int $colorComponent): void 71 { 72 if ($colorComponent < 0 || $colorComponent > 255) { 73 throw new InvalidColorException("The RGB components must be between 0 and 255. Received: {$colorComponent}"); 74 } 75 } 76 77 /** 78 * Converts the color component to its corresponding hexadecimal value. 79 * 80 * @param int $colorComponent Color component, 0 - 255 81 * 82 * @return string Corresponding hexadecimal value, with a leading 0 if needed. E.g "0f", "2d" 83 */ 84 private static function convertColorComponentToHex(int $colorComponent): string 85 { 86 return str_pad(dechex($colorComponent), 2, '0', STR_PAD_LEFT); 87 } 88 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body