PHP में हेक्स रंग को RGB मान में बदलें


82

PHP का उपयोग करके #ffffffएकल आरजीबी मूल्यों की तरह हेक्स रंग मूल्यों को परिवर्तित करने का एक अच्छा तरीका क्या होगा 255 255 255?


वे दो हेक्स एक ही प्रकार के हैं? पहला सफेद रंग का प्रतिनिधित्व करता है, दूसरा काला ... आप क्या करने की कोशिश कर रहे हैं?
BenOfTheNorth

$output = sprintf('%06x', 0xffffff - hexdec(ltrim($input, '#'));हालाँकि यह संभवतया सरल है और आप आरजीबी घटकों का अलग-अलग विश्लेषण करना चाहेंगे, कृपया ठीक से समझाएँ कि आप क्या करना चाहते हैं।
डेवग्रैंडम

आपका लक्ष्य प्रतिनिधित्व उदाहरण (ए) मेरे द्वारा देखे गए रंग का कोई प्रतिनिधित्व नहीं करता है और (बी) आपकी #"आवश्यकता " के बिना पूरा नहीं करता है ।
क्वेंटिन

#ffffffऔर #00000क्रमशः व्हाइट और ब्लैक का प्रतिनिधित्व करता है। और yr की जानकारी के लिए #00000हेक्स नहीं इंटेगर भी है। यहाँ f15.
रवि 12

केवल एक पूर्णांक का उपयोग करके और केवल रूपांतरण से आपका क्या मतलब है ?
सेवर्री एम। ऑलसेन

जवाबों:


56

PHP के कार्यों hexdec()और dechex()कार्यों की जाँच करें : http://php.net/manual/en/function.hexdec.php

उदाहरण:

$value = hexdec('ff'); // $value = 255

7
दिए गए हेक्स मान से लेकर आरजीबी तक एक पूर्ण रूपांतरण करने के लिए इस उत्तर का उपयोग करने के लिए, एक विकल्प निम्नलिखित है:$split_hex_color = str_split( $hex_color, 2 ); $rgb1 = hexdec( $split_hex_color[0] ); $rgb2 = hexdec( $split_hex_color[1] ); $rgb3 = hexdec( $split_hex_color[2] );
तत्कालीन

290

यदि आप हेक्स को आरजीबी में बदलना चाहते हैं तो आप sscanf का उपयोग कर सकते हैं :

<?php
$hex = "#ff9900";
list($r, $g, $b) = sscanf($hex, "#%02x%02x%02x");
echo "$hex -> $r $g $b";
?>

आउटपुट:

#ff9900 -> 255 153 0

क्या ऐसा कुछ है जिससे मैं रूपांतरण कर सकूँ जैसे मैंने अपने प्रश्न में पूछा है? क्या मेरा उत्पादन 12 000000 पर # 000000
user123_456

14
के साथ अच्छा साफ दृष्टिकोण sscanf(), मैं जादू की चाल के अपने बॉक्स में एक डाल रहा हूँ। दुर्भाग्य से ऐसा लगता है कि ओपी इस बात के लिए बहुत आलसी है कि आप क्या कर रहे हैं और आप इस विचार के साथ कहाँ जा रहे हैं।
डेवग्रैंडम

11
और शॉर्टहैंड रंगों के लिए ( #ccc): (strlen($hex) === 4) ? list($r, $g, $b) = sscanf($hex, "#%1x%1x%1x") : list($r, $g, $b) = sscanf($hex, "#%2x%2x%2x");
iiic

5
@ यिक सिर्फ आपके वन-लाइनर के लिए एक परीक्षा लिख ​​रहा है। #cc 204, 204, 204 के बजाय 12, 12, 12 को लौटाएगा, इसलिए यदि आप इसे वापस हेक्स में लाते हैं, तो आपको रंग # 0c0c0c मिलेगा।
जॉन लिनहार्ट

1
# F0F शॉर्टहैंड रंगों की सूची ($ r, $ g, $ b) = sscanf ('#' '। Implode (' '), array_map (' str_repeat ', str_split (' # ',' '' ') के लिए # FF00FF में अनुवाद करता है। $ हेक्स)), [2,2,2])), "#% 02x% 02x% 02x");
aconrad

41

मैंने एक फ़ंक्शन बनाया जो अल्फा को भी रिटर्न करता है यदि अल्फा दूसरे पैरामीटर के रूप में प्रदान किया जाता है तो कोड नीचे है।

कार्यक्रम

function hexToRgb($hex, $alpha = false) {
   $hex      = str_replace('#', '', $hex);
   $length   = strlen($hex);
   $rgb['r'] = hexdec($length == 6 ? substr($hex, 0, 2) : ($length == 3 ? str_repeat(substr($hex, 0, 1), 2) : 0));
   $rgb['g'] = hexdec($length == 6 ? substr($hex, 2, 2) : ($length == 3 ? str_repeat(substr($hex, 1, 1), 2) : 0));
   $rgb['b'] = hexdec($length == 6 ? substr($hex, 4, 2) : ($length == 3 ? str_repeat(substr($hex, 2, 1), 2) : 0));
   if ( $alpha ) {
      $rgb['a'] = $alpha;
   }
   return $rgb;
}

फ़ंक्शन प्रतिक्रियाओं का उदाहरण

print_r(hexToRgb('#19b698'));
Array (
   [r] => 25
   [g] => 182
   [b] => 152
)

print_r(hexToRgb('19b698'));
Array (
   [r] => 25
   [g] => 182
   [b] => 152
)

print_r(hexToRgb('#19b698', 1));
Array (
   [r] => 25
   [g] => 182
   [b] => 152
   [a] => 1
)

print_r(hexToRgb('#fff'));
Array (
   [r] => 255
   [g] => 255
   [b] => 255
)

यदि आप CSS प्रारूप में आरजीबी (ए) को वापस करना चाहते हैं, return $rgb;तो फ़ंक्शन के साथ लाइन को बदलेंreturn implode(array_keys($rgb)) . '(' . implode(', ', $rgb) . ')';


33

किसी के लिए भी यह दिलचस्पी है, इसे करने का एक और बहुत सरल तरीका है। यह उदाहरण मानता है कि ठीक 6 अक्षर हैं और कोई पूर्ववर्ती पाउंड चिन्ह नहीं है।

list($r, $g, $b) = array_map('hexdec', str_split($colorName, 2));

यहाँ एक उदाहरण है 4 विभिन्न आदानों (abc, aabbcc, #abc, #abbcc) का समर्थन:

list($r, $g, $b) = array_map(
  function ($c) {
    return hexdec(str_pad($c, 2, $c));
  },
  str_split(ltrim($colorName, '#'), strlen($colorName) > 4 ? 2 : 1)
);

11
अगर यह हो सकता है तो # की देखभाल करने के ltrim($colorName, '#')बजाय उपयोग करें$colorName
mikeytown2

वाह, आपकी दूसरी पंक्ति कोड अविश्वसनीय है ... यह # या नहीं, और 3 या 6 वर्णों को स्वीकार करता है। मुझे लगता है कि यह इस पृष्ठ पर किसी भी कोड उदाहरण का सबसे अच्छा तरीका है। मैं इसे भविष्य की परियोजनाओं के लिए बुकमार्क कर रहा हूं।
हरगोबिंद

15

आप hexdec(hexStr: String)हेक्साडेसिमल स्ट्रिंग के दशमलव मान प्राप्त करने के लिए फ़ंक्शन का उपयोग कर सकते हैं ।

एक उदाहरण के लिए नीचे देखें:

$split = str_split("ffffff", 2);
$r = hexdec($split[0]);
$g = hexdec($split[1]);
$b = hexdec($split[2]);
echo "rgb(" . $r . ", " . $g . ", " . $b . ")";

यह छपेगा rgb(255, 255, 255)


समझने और लागू करने के लिए आसान समाधान। Tks!
डिएगो सोमर

5

हेक्स रंगों के साथ या बिना हैश, एकल मान या युग्म मानों की देखभाल करने के लिए मेरा दृष्टिकोण:

function hex2rgb ( $hex_color ) {
    $values = str_replace( '#', '', $hex_color );
    switch ( strlen( $values ) ) {
        case 3;
            list( $r, $g, $b ) = sscanf( $values, "%1s%1s%1s" );
            return [ hexdec( "$r$r" ), hexdec( "$g$g" ), hexdec( "$b$b" ) ];
        case 6;
            return array_map( 'hexdec', sscanf( $values, "%2s%2s%2s" ) );
        default:
            return false;
    }
}
// returns array(255,68,204)
var_dump( hex2rgb( '#ff44cc' ) );
var_dump( hex2rgb( 'ff44cc' ) );
var_dump( hex2rgb( '#f4c' ) );
var_dump( hex2rgb( 'f4c' ) );
// returns false
var_dump( hex2rgb( '#f4' ) );
var_dump( hex2rgb( 'f489' ) );

5

आप नीचे दिए गए कोड के इस सरल टुकड़े की कोशिश कर सकते हैं।

list($r, $g, $b) = sscanf(#7bde84, "#%02x%02x%02x");
echo $r . "," . $g . "," . $b;

यह 123,222,132 लौटेगा


4

कन्वर्ट कलर कोड HEX को RGB

$color = '#ffffff';
$hex = str_replace('#','', $color);
if(strlen($hex) == 3):
   $rgbArray['r'] = hexdec(substr($hex,0,1).substr($hex,0,1));
   $rgbArray['g'] = hexdec(substr($hex,1,1).substr($hex,1,1));
   $rgbArray['b'] = hexdec(substr($hex,2,1).substr($hex,2,1));
else:
   $rgbArray['r'] = hexdec(substr($hex,0,2));
   $rgbArray['g'] = hexdec(substr($hex,2,2));
   $rgbArray['b'] = hexdec(substr($hex,4,2));
endif;

print_r($rgbArray);

उत्पादन

Array ( [r] => 255 [g] => 255 [b] => 255 )

मुझे यहाँ से यह संदर्भ मिला है - PHP का उपयोग करके Color Hex को RGB और RGB को Hex में कन्वर्ट करें


3

मैंने @ जॉन के उत्तर और @ iic की टिप्पणी / विचार को एक फ़ंक्शन में एक साथ रखा है जो दोनों को संभाल सकता है, सामान्य हेक्स रंग कोड और शॉर्टहैंड रंग कोड।

एक संक्षिप्त विवरण:

स्कैनफ के साथ मैंने हेक्स रंग से आर, जी और बी मानों को तार के रूप में पढ़ा। @ जॉन के उत्तर की तरह हेक्स मूल्यों के रूप में नहीं। शॉर्टहैंड कलर कोड का उपयोग करने के मामले में, r, g और b स्ट्रिंग्स को दशमलव में बदलने से पहले दोगुना ("f" -> "ff" आदि) करना पड़ता है।

function hex2rgb($hexColor)
{
  $shorthand = (strlen($hexColor) == 4);

  list($r, $g, $b) = $shorthand? sscanf($hexColor, "#%1s%1s%1s") : sscanf($hexColor, "#%2s%2s%2s");

  return [
    "r" => hexdec($shorthand? "$r$r" : $r),
    "g" => hexdec($shorthand? "$g$g" : $g),
    "b" => hexdec($shorthand? "$b$b" : $b)
  ];
}

0

इसे आज़माएं, यह अपने तर्कों (r, g, b) को हेक्साडेसिमल html-color string #RRGGBB में परिवर्तित करता है। तर्क पूर्णांकों में परिवर्तित हो जाते हैं और 0..255 रेंज तक ट्रिम कर दिए जाते हैं

<?php
function rgb2html($r, $g=-1, $b=-1)
{
    if (is_array($r) && sizeof($r) == 3)
        list($r, $g, $b) = $r;

    $r = intval($r); $g = intval($g);
    $b = intval($b);

    $r = dechex($r<0?0:($r>255?255:$r));
    $g = dechex($g<0?0:($g>255?255:$g));
    $b = dechex($b<0?0:($b>255?255:$b));

    $color = (strlen($r) < 2?'0':'').$r;
    $color .= (strlen($g) < 2?'0':'').$g;
    $color .= (strlen($b) < 2?'0':'').$b;
    return '#'.$color;
}
?>

ओह और दूसरा रास्ता गोल

# शुरुआत में चरित्र को छोड़ा जा सकता है। रंग स्वरूप को पहचानने में विफल होने पर (0..255) रेंज में तीन पूर्णांकों की फंक्शन रिटर्न सरणी।

<?php
function html2rgb($color)
{
    if ($color[0] == '#')
        $color = substr($color, 1);

    if (strlen($color) == 6)
        list($r, $g, $b) = array($color[0].$color[1],
                                 $color[2].$color[3],
                                 $color[4].$color[5]);
    elseif (strlen($color) == 3)
        list($r, $g, $b) = array($color[0].$color[0], $color[1].$color[1], $color[2].$color[2]);
    else
        return false;

    $r = hexdec($r); $g = hexdec($g); $b = hexdec($b);

    return array($r, $g, $b);
}
?>


0

यह एकमात्र समाधान है जिसने मेरे लिए काम किया। कुछ उत्तर पर्याप्त नहीं थे।

    function hex2rgba($color, $opacity = false) {

        $default = 'rgb(0,0,0)';

        //Return default if no color provided
        if(empty($color))
              return $default;

        //Sanitize $color if "#" is provided
            if ($color[0] == '#' ) {
                $color = substr( $color, 1 );
            }

            //Check if color has 6 or 3 characters and get values
            if (strlen($color) == 6) {
                    $hex = array( $color[0] . $color[1], $color[2] . $color[3], $color[4] . $color[5] );
            } elseif ( strlen( $color ) == 3 ) {
                    $hex = array( $color[0] . $color[0], $color[1] . $color[1], $color[2] . $color[2] );
            } else {
                    return $default;
            }

            //Convert hexadec to rgb
            $rgb =  array_map('hexdec', $hex);

            //Check if opacity is set(rgba or rgb)
            if($opacity){
                if(abs($opacity) > 1)
                    $opacity = 1.0;
                $output = 'rgba('.implode(",",$rgb).','.$opacity.')';
            } else {
                $output = 'rgb('.implode(",",$rgb).')';
            }

            //Return rgb(a) color string
            return $output;
    }
    //hex2rgba("#ffaa11",1)

0
function RGB($hex = '')
{
    $hex = str_replace('#', '', $hex);
    if(strlen($hex) > 3) $color = str_split($hex, 2);
    else $color = str_split($hex);
    return [hexdec($color[0]), hexdec($color[1]), hexdec($color[2])];
}

हालांकि यह कोड प्रश्न को हल कर सकता है, जिसमें यह भी बताया गया है कि यह समस्या कैसे और क्यों हल करती है, इससे वास्तव में आपके पोस्ट की गुणवत्ता को बेहतर बनाने में मदद मिलेगी, और शायद अधिक वोट भी मिलेंगे। याद रखें कि आप भविष्य में पाठकों के लिए सवाल का जवाब दे रहे हैं, न कि केवल उस व्यक्ति से जो अब पूछ रहा है। कृपया स्पष्टीकरण जोड़ने के लिए अपने उत्तर को संपादित करें और संकेत दें कि क्या सीमाएँ और मान्यताएँ लागू होती हैं।
धर्मन

0
Enjoy    

public static function hexColorToRgba($hex, float $a){
        if($a < 0.0 || $a > 1.0){
            $a = 1.0;
        }
        for ($i = 1; $i <= 5; $i = $i+2){
            $rgb[] = hexdec(substr($hex,$i,2));
        }
        return"rgba({$rgb[0]},{$rgb[1]},{$rgb[2]},$a)";
    }

उत्तर देते समय, यह बहुत अधिक उपयोगी होता है यदि आप समझाते हैं कि यह पसंदीदा समाधान क्यों है। लक्ष्य शिक्षित करना है, न कि केवल एक विशिष्ट समस्या का समाधान करना है।
द टिन मैन

0

मेरा समाधान: (लघु संकेतन का समर्थन करता है)

$color = "#0ab";
$colort = trim( $color );
if( $colort and is_string( $color ) and preg_match( "~^#?([abcdef0-9]{3}|[abcdef0-9]{6})$~ui", $colort ))
{
    if( preg_match( "~^#?[abcdef0-9]{3}$~ui", $colort ))
    {
        $hex = trim( $colort, "#" );
        list( $hexR, $hexG, $hexB ) = str_split( $hex );
        $hexR .= $hexR;
        $hexG .= $hexG;
        $hexB .= $hexB;
    }
    else
    {
        $hex = trim( $colort, "#" );
        list( $hexR, $hexG, $hexB ) = str_split( $hex, 2 );
    }

    $colorR = hexdec( $hexR );
    $colorG = hexdec( $hexG );
    $colorB = hexdec( $hexB );
}

// Test
echo $colorR ."/" .$colorG ."/" .$colorB;
// → 0/170/187
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.