Loading...
Свободное общение | Помогите с функцией градиента
Проблема в том что не отображает все градиенты , тоесть в большенстве случаев выходит так что градиент либо темный либо вообще не того цвета который ставился. и не могу понять где подвох... за помощь кину рублей на вм
php
   <? 
function extract16color($color16) {

$mask16 = "0123456789ABCDEF";
$true_color = [0, 0, 0];
$color16 = mb_substr($color16, 1);

for ($i = 0; $i < 3; $i++) {

$color16_temp = [mb_substr($color16, $i * 2, 1), mb_substr($color16, $i * 2 + 1, 1)];

for ($j = 0; $j < 2; $j++) {

for ($k = 0; $k < 15; $k++) {

if ($color16_temp[$j] == $mask16[$k]) {

$color16_temp[$j] = $k;

break;

}

}

}

$true_color[$i] = intval($color16_temp[0]) * 16 + intval($color16_temp[1]);

}

return $true_color;

}

function make16color($color10) {

$mask16 = "0123456789ABCDEF";
$true_color = "#";

for ($i = 0; $i < 3; $i++) {

$color10_temp = $color10[$i];
$true_color.= $mask16[intval($color10_temp / 16)];
$true_color.= $mask16[intval($color10_temp % 16)];

}

return $true_color;

}

function str2gradient($text, $sColor, $eColor) {

$text = trim($text);
$sColor = preg_match("#^\#[a-f0-9]{6}$#i", $sColor) ? $sColor : "#000000";
$eColor = preg_match("#^\#[a-f0-9]{6}$#i", $eColor) ? $eColor : "#000000";

$color_move = [0, 0, 0];
$color_add = [0, 0, 0];
$length = mb_strlen($text);
$output = NULL;
$copy_color = NULL;
$current_color = NULL;
$max = 0;

if ($length > 0) {

$sColor = extract16color($sColor);
$eColor = extract16color($eColor);
$cColor = $sColor;

for ($i = 0; $i < 3; $i++) {

$temp = $sColor[$i] - intval($eColor[$i]);
$temp_a = abs($temp);
$color_add[$i] = $temp_a;

if ($temp_a > $max) {

$max = $temp_a;

}

if ($temp < 0) {

$color_move[$i] = 1;

} elseif ($temp > 0) {

$color_move[$i] = -1;

} else {

$color_move[$i] = 0;

}

}

for ($i = 0; $i < $length; $i++) {

$char = mb_substr($text, $i, 1);
$koeff_add = $max / $length / $max * 100;

for ($j = 0; $j < 3; $j++) {

$add = intval($color_add[$j]) / 100 * intval($koeff_add) * intval($color_move[$j]);
$cColor[$j] += $add;

}

$current_color = make16color($cColor);

if ($i == 0) {

$output.= '<font color="'.$current_color.'">'.$char;
$copy_color = $current_color;

} else {

if ($current_color == $copy_color || $char == " ") {

$output.= $char;

} else {

$output.= '</font><font color="'.$current_color.'">'.$char;
$copy_color = $current_color;

}

}

}

if (mb_strlen($output)) {

$output.= '</font>';

}

return $output;

}

}
?>
Зачем мучаешь когда есть 0х000000 по ней легче
ЯнеЛохматый , обьясни
минимальный 0х000000 максимальный 0xFFFFFF оба проверяете это его граница цвета такая же #000000 и макс #ffffff

а конвентировать
[hljs]
const int step = 8;
for( int red = 0x00; red <= 0xFF; red += step ) {
for( int green = 0x00; green <= 0xFF; green += step ) {
for( int blue = 0x00; blue <= 0xFF; blue += step ) {
const int color = blue << 16 + green << 8 + red;
// Change the led settings here.
}
}
}
[/hljs]

но вы можете просто убрать # и превратить его через hex число в color

long red = color >> 16;
long green = color >> 8 & 0xFF;
long blue = color & 0xFF;
а потом из него вы можете сверять от начального градиента и конец градиента числом потом делите на количество букв и получите градиент
лучше используй background: linear-gradient
и не нужны ни какие функции
Four , хоть один умный коммент на этом сайте))
Flowap , не будет у него работать
Онлайн: 1
Время:
Gen. 0.051
(c) Bym.Guru 2010-2026