Илья Л.
Заглянувший
Joined: 20 Jan 2008
Posts: 1
Карма: 0 поощрить/наказать
|
Posted: Tue Jan 22, 2008 6:15 am (написано за 3 минуты 30 секунд)
Post subject: str2gradient - преобразование строки в градиент-аналог
|
|
Значит понадобилась мне простенькая реализация данного вопроса, вразумительного мало нашёл авось пригодится кому-нибудь. Функция естественно ещё до идеала не до ведена, но всё же пользоваться можно
| Code (php): |
скопировать код в буфер обмена |
<?php/* * * Преобразовывает строку $text в строку-градиент * начиная с цвета $from и заканчивая цветом $to * Поддерживает работу как и с rgb режимом так и с hex * * @param string $text - сама строка * @param string $from - начальный цвет * @param string $to - Конечный цвет * @param string $mode - Режим, по умолчанию hex */function str2gradient ($text, $from= '', $to= '', $mode= "hex"){ if($mode== "hex") { $to = hexdec($to[0]. $to[1]). ",".hexdec ($to[2]. $to[3]). ",".hexdec ($to[4]. $to[5]); $from= hexdec($from[0]. $from[1]). ",".hexdec ($from[2]. $from[3]). ",".hexdec ($from[4]. $from[5]); } if( empty($text) ) return ''; else $levels= strlen($text); if (empty($from)) $from = array(0, 0, 255); else $from = explode(",", $from); if (empty($to)) $to = array(255, 0, 0); else $to = explode(",", $to); $output = ""; for ($i= 1; $i<= $levels; $i++ ) { for ($ii= 0; $ii< 3; $ii++ ) { $tmp[$ii] = $from[$ii] - $to[$ii]; $tmp[$ii] = floor($tmp[$ii] / $levels); $rgb[$ii] = $from[$ii] - ($tmp[$ii] * $i); if ($rgb[$ii] > 255) $rgb[$ii] = 255; $rgb[$ii] = dechex($rgb[$ii]); $rgb[$ii] = strtoupper($rgb[$ii]); if (strlen($rgb[$ii]) < 2) $rgb[$ii] = "0$rgb[$ii]"; } $output .= "<font color=\"#". $rgb[0]. $rgb[1]. $rgb[2]. "\">" . $text[$i - 1 ] . "</font>"; } return $output. "\n"; }?> |
Пример использования:
| Code (php): |
скопировать код в буфер обмена |
<?phpinclude("str2gradient.php"); echo str2gradient ("Привет, я Градиент!", "FF0000", "FFCC00"); echo "<hr />\n"; echo str2gradient ("Привет, я Градиент в режиме rgb!", "255,255,0", "150,150,0", "rgb"); ?> |
Сегодня-завтра сделаю функцию по умней, но, повторюсь, пользоваться ей можно уже и сейчас :)
|
|
Rumata
Профессионал

Joined: 17 Aug 2003
Posts: 1846
Карма: 182 поощрить/наказать
|
Posted: Fri Feb 15, 2008 10:44 pm (спустя 24 дня 16 часов 29 минут; написано за 39 секунд)
Post subject:
|
|
мое очередное баловство на досуге:
| Code (php): |
скопировать код в буфер обмена |
function gradient ($txt, $from=0x000000, $to=0xffffff ) { // count of all characters $strlen = strlen($txt); // count of nonblank characters $grdlen = $strlen - preg_match_all('/\s/', $txt, $null) - 1; // skip a colorizing of whitespace line if ( ! $grdlen ) { return $txt; } // skip a single coloring if ( $from == $to ) { return sprintf('<span style="color: #%06x">%s</span>', $from, $txt); } // represent the start and the end colors as arrays $f = array( floor($from / 0x10000 ), floor(($from & 0xffff ) / 0x100 ), $from & 0xff, ); $t = array( floor($to / 0x10000 ), floor(($to & 0xffff ) / 0x100 ), $to & 0xff, ); // current value of red, green and blue colors separately $r = $f[0]; $g = $f[1]; $b = $f[2]; // deltas per each color $rd = ($t[0] - $f[0]) / $grdlen; $gd = ($t[1] - $f[1]) / $grdlen; $bd = ($t[2] - $f[2]) / $grdlen; $result = ''; for ($i = 0; $i < $strlen; $i++ ) { // skip colorizing of whitespaces if ( preg_match('/\s/', $txt{$i}) ) { $result .= $txt{$i}; continue; } // colorize one character $result .= sprintf('<span style="color: #%02x%02x%02x">%s</span>', $r, $g, $b, $txt{$i}); // next color $r += $rd; $g += $gd; $b += $bd; } return $result; } |
|
|
Maus
Модератор

Joined: 29 Jun 2003
Posts: 8046
Карма: 264 поощрить/наказать
Location: пос. Омсукчан Магаданской области
|
Posted: Thu Feb 21, 2008 9:49 pm (спустя 5 дней 23 часа 4 минуты)
Post subject:
|
|
|
|
|