首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 十六進位顏色代碼 (Hex) 轉 RGB 陣列函式

     編輯:PHP 相關知識

PHP 十六進位顏色代碼 (Hex) 轉 RGB 陣列函式

Web 開發常需在 CSS 十六進位顏色 (如 #FF5500、#F50) 與 RGB 數值 (如 rgb(255, 85, 0)) 之間轉換。本文提供一個健全的 hex2rgb() 函式,支援 3 位與 6 位縮寫、可選 # 前綴、輸入驗證,並回傳關聯陣列或 false 表示失敗。

函式完整程式碼

<?php
/**
 * 將十六進位顏色字串轉換為 RGB 陣列
 * @param string $hex 顏色字串,支援 '#RRGGBB', 'RRGGBB', '#RGB', 'RGB'
 * @return array|false 成功回傳 ['red'=>int, 'green'=>int, 'blue'=>int],失敗回傳 false
 */
function hex2rgb(string $hex): array|false {
    // 1. 移除可選的 # 前綴
    $hex = ltrim($hex, '#');
    
    // 2. 驗證長度與字元合法性 (只允許 0-9, a-f, A-F)
    if (!preg_match('/^([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/', $hex)) {
        return false;
    }

    // 3. 展開 3 位縮寫為 6 位 (如 'F50' -> 'FF5500')
    if (strlen($hex) === 3) {
        $hex = $hex[0].$hex[0] . $hex[1].$hex[1] . $hex[2].$hex[2];
    }

    // 4. 十六進位轉十進位
    $r = hexdec(substr($hex, 0, 2));
    $g = hexdec(substr($hex, 2, 2));
    $b = hexdec(substr($hex, 4, 2));

    return [
        'red'   => $r,
        'green' => $g,
        'blue'  => $b,
    ];
}

// 別名:回傳 'rgb(r, g, b)' 字串
function hex2rgbString(string $hex): string|false {
    $rgb = hex2rgb($hex);
    return $rgb ? "rgb({$rgb['red']}, {$rgb['green']}, {$rgb['blue']})" : false;
}
?>

測試與輸出範例

<?php
$tests = ['#eeeeee', 'eeeeee', '#F50', 'F50', '#FF5500', 'invalid', '#GGG'];
foreach ($tests as $color) {
    $result = hex2rgb($color);
    echo "輸入: $color → ";
    var_dump($result);
    // 輸出:
    // 輸入: #eeeeee → array(3) { ["red"]=> int(238) ["green"]=> int(238) ["blue"]=> int(238) }
    // 輸入: #F50 → array(3) { ["red"]=> int(255) ["green"]=> int(85) ["blue"]=> int(0) }
    // 輸入: invalid → bool(false)
}
?>

反向轉換:RGB 轉 Hex

<?php
function rgb2hex(int $r, int $g, int $b): string {
    // 限制範圍 0-255
    $r = max(0, min(255, $r));
    $g = max(0, min(255, $g));
    $b = max(0, min(255, $b));
    return sprintf('#%02X%02X%02X', $r, $g, $b);
}

// 測試
echo rgb2hex(238, 238, 238); // #EEEEEE
echo rgb2hex(255, 85, 0);    // #FF5500
?>

應用場景

  • 動態樣式產生: PHP 產生內聯 style="color: rgb(...)" 或動態 CSS 變數。
  • 圖片處理: GD/ImageMagick 繪圖函式多需 RGB 整數參數。
  • 顏色運算: 變亮/變暗、混色、對比度計算皆在 RGB 空間進行。
  • API 回傳: 前端色盤元件常用 Hex,後端儲存/運算用 RGB,雙向轉換必備。

現代 PHP 建議

若專案使用 PHP 8.1+,可善用 readonly class 封裝為 Color 實體物件:

readonly class Color {
    public function __construct(
        public int $red,
        public int $green,
        public int $blue
    ) {}

    public static function fromHex(string $hex): self|false {
        $rgb = hex2rgb($hex);
        return $rgb ? new self($rgb['red'], $rgb['green'], $rgb['blue']) : false;
    }

    public function toHex(): string {
        return sprintf('#%02X%02X%02X', $this->red, $this->green, $this->blue);
    }

    public function toRgbString(): string {
        return "rgb($this->red, $this->green, $this->blue)";
    }
}

掌握 Hex 與 RGB 雙向轉換,是前後端顏色處理的基礎技能,配合正則驗證與型別宣告,能寫出健壯且可維護的程式碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved