Программно осветите цвет

вы не можете достичь своей цели с помощью javascript. потому что клиент может проанализировать ваш javascript и обойти ваши методы. Вы должны сделать проверку на стороне сервера через captchas. основная идея заключается в том, что вы храните секрет на стороне сервера и проверяете форму, представленную клиентом, с секретом на стороне сервера.

70
задан Keng 21 October 2008 в 13:25
поделиться

14 ответов

Я пошел бы для второй опции. Вообще говоря, пространство RGB не действительно хорошо для того, чтобы сделать цветное управление (создающий переход от одного цвета до другого, светясь / затемнение цвета, и т.д.). Ниже два сайта, которые я нашел с быстрым поиском для преобразования от RGB до HSL:

38
ответ дан Grey Panther 7 November 2019 в 09:16
поделиться

Вы найдете, что код преобразовывает между цветовыми пространствами в эти библиотека рубина цветных инструментов

0
ответ дан Thibaut Barrère 7 November 2019 в 09:16
поделиться

Технически, я не думаю, что любой корректен, но я полагаю, что Вы хотите вариант опции № 2. Проблема, являющаяся тем взятым RGB 990000 и "облегчающая" его, действительно просто добавила бы на Красный канал (Значение, Яркость, Легкость), пока Вы не добрались до И следующие После этого (чисто красного), он будет удалять насыщенность для движения полностью в чистый белый.

преобразования становятся раздражающими, тем более, что Вы не можете пойти прямо к и от RGB и Лаборатории, но я думаю, что Вы действительно хотите разделить цветность и значения luminence, и просто изменить luminence для реального достижения того, что Вы хотите.

0
ответ дан Pseudo Masochist 7 November 2019 в 09:16
поделиться

Преобразование в HS (LVB), увеличение яркости и затем преобразование назад в RGB являются единственным способом надежно осветить цвет, не производя оттенок и степени насыщения (т.е. только осветить цвет, не изменяя его никаким другим способом).

2
ответ дан David Arno 7 November 2019 в 09:16
поделиться

ЕСЛИ БЫ Вы хотите произвести постепенное исчезновение градиента, я предложил бы следующую оптимизацию: вместо того, чтобы делать RGB-> HSB-> RGB для каждого отдельного цвета, необходимо только вычислить целевой цвет. Как только Вы знаете целевой RGB, можно просто вычислить промежуточные значения в пространстве RGB, не имея необходимость преобразовывать назад и вперед. Вычисляете ли Вы линейный переход использования, своего рода кривая ваше дело.

1
ответ дан VoidPointer 7 November 2019 в 09:16
поделиться

Очень похожий вопрос, с полезными ответами, задали ранее: , Как я определяю более темный или более легкий цветной вариант данного цвета?

Короткий ответ: умножьте значения RGB на константу, если Вы просто нуждаетесь "достаточно хороший", переводите в HSV при требовании точности.

3
ответ дан Community 7 November 2019 в 09:16
поделиться

Я попробовал бы число № 1 сначала, но № 2 звучит довольно хорошим. Попытайтесь делать его сами и посмотрите, удовлетворены ли Вы результатами, это кажется, что Вам потребуются, возможно, 10 минут, чтобы сделать на скорую руку тест.

0
ответ дан davr 7 November 2019 в 09:16
поделиться

Преобразуйте его в RGB и линейно интерполируйте между исходным цветом и целевым цветом (часто белый). Так, если Вы хотите 16 оттенков между двумя цветами, Вы делаете:


for(i = 0; i < 16; i++)
{
  colors[i].R = start.R + (i * (end.R - start.R)) / 15;
  colors[i].G = start.G + (i * (end.G - start.G)) / 15;
  colors[i].B = start.B + (i * (end.B - start.B)) / 15;
}
8
ответ дан Adam Rosenfield 7 November 2019 в 09:16
поделиться

В C#:

public static Color Lighten(Color inColor, double inAmount)
{
  return Color.FromArgb(
    inColor.A,
    (int) Math.Min(255, inColor.R + 255 * inAmount),
    (int) Math.Min(255, inColor.G + 255 * inAmount),
    (int) Math.Min(255, inColor.B + 255 * inAmount) );
}

я использовал это повсеместно.

24
ответ дан Nick 7 November 2019 в 09:16
поделиться

Класс ControlPaint в Системе. Windows. Пространство имен форм имеет статические методы, Легкие и Темные:

public static Color Dark(Color baseColor, float percOfDarkDark);

Эти методы используют частную реализацию HLSColor. Мне жаль, что эта структура не была общедоступна и в Системе. Рисунок.

, С другой стороны, можно использовать GetHue, GetSaturation, GetBrightness на Цветной структуре для получения компонентов HSB. К сожалению, я не нашел обратную конверсию.

11
ответ дан Ilya Ryzhenkov 7 November 2019 в 09:16
поделиться

Как Wedge сказал , Вы хотите умножиться для создания вещей более яркими, но который только работает, пока один из цветов не становится влажным (т.е. совершает нападки 255 или больше). В той точке можно просто зафиксировать значения к 255, но Вы будете тонко изменять оттенок, поскольку Вы становитесь легче. Для хранения оттенка Вы хотите поддержать отношение (среднего самого низкого) / (самый высокий самый низкий).

Вот две функции в Python. Первые реализации наивный подход, который просто фиксирует значения RGB к 255, если они переходят. Второе перераспределяет избыточные значения для сохранения оттенка в целости.

def clamp_rgb(r, g, b):
    return min(255, int(r)), min(255, int(g)), min(255, int(b))

def redistribute_rgb(r, g, b):
    threshold = 255.999
    m = max(r, g, b)
    if m <= threshold:
        return int(r), int(g), int(b)
    total = r + g + b
    if total >= 3 * threshold:
        return int(threshold), int(threshold), int(threshold)
    x = (3 * threshold - total) / (3 * m - total)
    gray = threshold - x * m
    return int(gray + x * r), int(gray + x * g), int(gray + x * b)

я создал градиент, запускающийся со значения RGB (224,128,0) и умножающий его на 1,0, 1.1, 1.2, и т.д. до 2,0. Верхняя половина является результатом с помощью clamp_rgb, и нижняя половина является результатом с redistribute_rgb. Я думаю, что легко видеть, что перераспределение переполнения дает намного лучший результат, не имея необходимость оставлять цветовое пространство RGB.

Lightness gradient with clamping (top) and redistribution (bottom)

Для сравнения, вот тот же градиент в HLS и цветовых пространствах HSV, как реализовано модулем Python colorsys . Только L компонент был изменен, и фиксация была выполнена на получающихся значениях RGB. Результаты подобны, но требуют преобразований цветового пространства для каждого пикселя.

Lightness gradient with HLS (top) and HSV (bottom)

56
ответ дан Community 7 November 2019 в 09:16
поделиться

Я сделал это оба пути - Вы получаете намного лучшие результаты с Возможностью 2.

Любой простой алгоритм Вы создаете для Возможности 1, будет, вероятно, работать хорошо только на ограниченный диапазон стартовой насыщенности.

Вы хотели бы изучить Возможный 1, если (1) можно ограничить цвета и используемые яркости и (2) Вы выполняете вычисление много в рендеринге.

для Генерации фона для UI не будут нужны очень много вычислений штриховки, таким образом, я предложу Возможные 2.

- Al.

2
ответ дан 7 November 2019 в 09:16
поделиться

Я думаю, что у меня была та же проблема, и я не смог заставить XMS работать. Если это все еще проблема для вас, это может помочь

С уважением к Кристофферу

-121--4460571-

jQuery более эффективен для небольших, интеллектуальных клиентских эффектов. prototypejs более эффективен для глубокой разработки javascript.

jQuery имеет множество подключаемых модулей для надежных эффектов пользовательского интерфейса. прототипы имеют полную библиотеку для перечислений, функций, хэшей.

-121--3460764-

У меня есть запись в блоге , в которой показано, как это сделать в Delphi. Он довольно прост, потому что функции ColorRGBToHSL и ColorHLSToRGB являются частью стандартной библиотеки.

0
ответ дан 24 November 2019 в 12:57
поделиться

Метод 1. Преобразование RGB в HSL, настройка HSL, обратное преобразование в RGB.

Метод 2: Lerp значения цвета RGB - http://en.wikipedia.org/wiki/Lerp_ (вычисления)

См. мой ответ на этот аналогичный вопрос для реализации метода 2 в C #.

1
ответ дан 24 November 2019 в 12:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: