2017-04-11 8 views
-1

変数によって設定された色に基づいて色を変更したいというイメージがあります。私が持っている問題は、データソースからの値が16進数であり、imagecoloursetがrgbで機能するということです。 私は、変換機能を設定している。その後、16進数をrgbに変換してimagecoloursetで使用できるようにするにはどうすればよいですか?

function hex2rgb($hex) { 
$hex = str_replace("#", "", $hex); 

if(strlen($hex) == 3) { 
    $r = hexdec(substr($hex,0,1).substr($hex,0,1)); 
    $g = hexdec(substr($hex,1,1).substr($hex,1,1)); 
    $b = hexdec(substr($hex,2,1).substr($hex,2,1)); 
} else { 
    $r = hexdec(substr($hex,0,2)); 
    $g = hexdec(substr($hex,2,2)); 
    $b = hexdec(substr($hex,4,2)); 
} 
$rgb = array($r, $g, $b); 
    return implode(",", $rgb); // returns the rgb values separated by commas 

} 

などのように、これを使用します。

$homeRGB = hex2rgb($homeColour); 
imagecolorset($him,$hindex, $homeRGB); 

を私はimagecolorsetはわずか5つのパラメータをexceptsでのみ3セットがあるというエラーメッセージが表示されます。結果は225,225,225を出力するはずです。なぜ私は手動で225,225,225を入力すればコードが正常に動作するのか、3の代わりに1つのパラメータとして読み取るのがわかりません。どこが間違っているのかわからない?

答えて

0

PHP関数imagecolorset()では、代わりにデータ型INTEGERの3つの別個のパラメータとしてrgb-valuesを渡す必要がある場合、データ型STRINGの変数を渡そうとしています。

一般的に、PHPはType Jugglingではかなり寛容ですが、その文字列の内容が別のパラメータとして扱われることを期待する関数パラメータとしてはcan not pass a comma separated stringです。文字列にコンマが含まれていても、1つのパラメータとして扱われます。

代わりに配列を返すために、あなたの関数を変更します。その後、

function hex2rgb($hex) { 
    $hex = str_replace("#", "", $hex); 

    if(strlen($hex) == 3) { 
     $r = hexdec(substr($hex,0,1).substr($hex,0,1)); 
     $g = hexdec(substr($hex,1,1).substr($hex,1,1)); 
     $b = hexdec(substr($hex,2,1).substr($hex,2,1)); 
    } else { 
     $r = hexdec(substr($hex,0,2)); 
     $g = hexdec(substr($hex,2,2)); 
     $b = hexdec(substr($hex,4,2)); 
    } 
    return array($r, $g, $b); // RETURN ARRAY INSTEAD OF STRING 
} 

など、それを使用します。

$homeRGB = hex2rgb($homeColour); 
imagecolorset($him,$hindex, $homeRGB[0], $homeRGB[1], $homeRGB[2]); 

ます場合は、何らかの理由で絶対にできないか、hex2rgbを変更することはありません - 関数を使用するには、call_user_func_array()

$homeRGB = hex2rgb($homeColour); 
call_user_func_array('imagecolorset', array_merge(array($him, $hindex), explode(',', $homeRGB))); 

It'sなぜなら、不必要な爆発や爆発などのオーバーヘッドのために推奨されていません。

+0

私は別の方法を使用して結果を整数に変換しようとしましたが、動作しませんでした。助けてくれてありがとう:-) – rmsGreig

関連する問題