Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Перевод rgb -> hex и обратно...


Автор: Mal Hack 13.12.2004, 01:06
В HEX перевожу вот так.
Код

<?php

$hex = "#";
$rgb = "255,120,255";

$arr = explode( "," , $rgb );

for( $i = 0; $i < 3; $i++ )
{  $hex .= sprintf( "%X" , $arr[ $i ] );  }

print $hex;

?>

Весь вопрос в том, как обратно преобрзовать... Тобишь грубо говоря из FF, получить 255.

Автор: Sardar 13.12.2004, 01:50
Можно так:
Код
<?php
$hex = "#FFAACC";

function toRGB($h) {
 $h=($h{0}=="#")? substr($h, 1): $h;
 $rgb=str_split($h, 2); //делим на строки по 2 символа
 $fltr = create_function('$v', 'return intval($v,16);'); //из 16ричной
 array_map($fltr, $rgb); //конвертируем строки в числа
 return implode(",", $rgb); //возвращаем через запятую
}

?>

Автор: penizillin 13.12.2004, 03:13
dechex() и hexdec() как альтернатива.

Автор: Mal Hack 13.12.2004, 12:28
Спасибо...
Вот что называется век живи, век учись... Ведь смотрел я в мане на intval Ж)
А про dechex() и hexdec() огромное спасибо... Пригодится еше.
Как итоговый код:
Код

<?php

$hex = "#ffFFff";
$rgb = "";

for( $i = 0; $i < 3; $i++ )
{  $arr[$i] = substr( $hex , 1 * ( $i + 1 ) , 2 );  }

$rgb .= hexdec( $arr[ 0 ] ) . "," . hexdec( $arr[ 1 ] ) . "," . hexdec( $arr[ 2 ] );

print "rgb( " . $rgb . " )";

?>

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)