Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

ฟังก์ชัน PHP แปลงค่า Hex เป็น HSL

นี่คือฟังก์ชัน PHP สำหรับแปลงค่าสีจากรูปแบบ Hexadecimal (Hex) เป็น HSL (Hue, Saturation, Lightness)

function hexToHsl($hex) {
    // ลบ # นำหน้าถ้ามี
    $hex = ltrim($hex, '#');
    
    // แยกค่า R, G, B (2 ตัวอักษรแต่ละค่า)
    $hexVal = [
        substr($hex, 0, 2),
        substr($hex, 2, 2),
        substr($hex, 4, 2)
    ];
    
    // แปลง Hex เป็นทศนิยม และ Normalize เป็น 0-1
    $rgbVal = array_map(function($part) {
        return hexdec($part) / 255;
    }, $hexVal);
    
    $maxVal = max($rgbVal);
    $minVal = min($rgbVal);
    $l = ($maxVal + $minVal) / 2; // Lightness
    
    if ($maxVal == $minVal) {
        // สีเทา (Achromatic) - ไม่มี Hue และ Saturation
        $h = $s = 0;
    } else {
        $diff = $maxVal - $minVal;
        // Saturation
        $s = $l > 0.5 ? $diff / (2 - $maxVal - $minVal) : $diff / ($maxVal + $minVal);
        
        // Hue
        switch ($maxVal) {
            case $rgbVal[0]: // Red เป็นค่าสูงสุด
                $h = ($rgbVal[1] - $rgbVal[2]) / $diff + ($rgbVal[1] < $rgbVal[2] ? 6 : 0);
                break;
            case $rgbVal[1]: // Green เป็นค่าสูงสุด
                $h = ($rgbVal[2] - $rgbVal[0]) / $diff + 2;
                break;
            case $rgbVal[2]: // Blue เป็นค่าสูงสุด
                $h = ($rgbVal[0] - $rgbVal[1]) / $diff + 4;
                break;
        }
        $h /= 6; // Normalize Hue เป็น 0-1
    }
    
    // คืนค่าเป็น Array [H, S, L] โดย H, S, L อยู่ในช่วง 0-1
    return [$h, $s, $l];
}

วิธีใช้งาน

$hsl = hexToHsl('#FF5733'); // สีส้ม
// ผลลัพธ์: [0.04, 1, 0.6] ประมาณ
// หากต้องการเป็นองศาและเปอร์เซ็นต์:
$h = round($hsl[0] * 360);
$s = round($hsl[1] * 100);
$l = round($hsl[2] * 100);
echo "HSL($h, $s%, $l%)"; // HSL(14, 100%, 60%)

หมายเหตุ: ฟังก์ชันนี้รองรับรูปแบบ Hex 6 หลัก (เช่น #FF5733 หรือ FF5733) สำหรับ Hex 3 หลัก (เช่น #F53) ควรขยายเป็น 6 หลักก่อนใช้งาน