Формула для определения результата цвета после применения x% непрозрачности к нему?

10

У меня 2 цвета

  1. #a1a2a4
  2. черный ( #000000)
  3. белый ( #ffffff)

Теперь мне нужно знать, какую непрозрачность (в процентах) я должен применить ко второму цвету (черному) на фоне третьего цвета (белого), чтобы получить цвет, «самый близкий» (как определено глазом) к первому цвет ( #a1a2a4).

Как мне это сделать?

Pacerier
источник
См. Также graphicdesign.stackexchange.com/questions/2204/…, чтобы узнать об обратном
Яри ​​Кейнянен,
Я немного смущен вашей формулировкой: вы хотите, чтобы grayпо цвету он был ближе всего к указанному, верно?
Горацио

Ответы:

6

Этот случай более или менее прост (вы имеете дело с черным и белым).

После применения цвета (# a1a2a4) проверьте уровни RGB:

Уровни RGB

Вы можете видеть, что он имеет приблизительно 162 (в среднем), и, зная, что он может быть от 0 до 255, вам просто нужно узнать процент:

162 * 100/255 = ~ 63,5%

Теперь, поскольку RGB работает в противоположном направлении по сравнению с CMYK (с точки зрения смешивания цветов, то есть полного смешения цветов означает белый, а с полным смешением цветов CMYK - черный), фактический процент в этом случае представляет собой разницу между 100% и значением что мы получили:

100 - 63,5 = 36,5%

Так что, если вы примените 36% непрозрачности, у него будет этот цвет, я только что проверил его.

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

jackJoe
источник
4

Вопрос, если я правильно понимаю: «Как бы вы рассчитали это программно?» Это простая математика, чтобы преобразовать целевой цвет в альфа-значение.

Белый == [1,1,1] или #ffffff или 255,255,255, в зависимости от вашего приложения. Черный == [0,0,0] и т. Д.

Итак: нормализуйте целевое значение (в данном случае 0,6314), вычтите из 1 и примените к черному слою как альфа-значение. Вы можете делать это по одному каналу за раз и усреднять результаты, но зачем беспокоиться, так как ваш цвет неотличим (для глаз) от нейтрально-серого # a1a1a1. (Все становится более сложным, если есть видимый оттенок, поскольку каналы будут иметь разные значения, но применяется тот же принцип.)

Алан Гилбертсон
источник
Это какой-то серьёзно сексуальный выродок прямо здесь. 8)
Лорен-Клир-Моника-Ипсум
3
Почему, спасибо! <регулирует защиту кармана, обеспечивает равномерное расположение ручек>
Алан Гилбертсон,
0

Немного более быстрый вариант проб и ошибок:

Создайте свой шестнадцатеричный цвет в Photoshop в документе CMYK и посмотрите на значения CMYK. Я получаю 39/32/31/1.

Создайте два слоя: верхний черный и нижний белый.

Потяните вверх информационное окно. Отдельно откройте окно слоев.

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

Lauren-Clear-Монике Ipsum
источник
Вы правы, но есть гораздо более странный способ сделать это. 8-й
Алан Гилбертсон,
0

Учитывая ваши цвета переднего плана и фона (одинаковые значения для каналов R, G и B), вы не можете добиться неоднородного цвета #a1a2a4путем изменения непрозрачности, потому что непрозрачность влияет на все каналы одновременно. Однако вы можете добиться «достаточно близкого» цвета #a1a1a1, установив непрозрачность черного цвета на 0.37. Вот инструмент, который я использовал:

http://colorizer.org/

  1. Нажмите «Фон» и установите шестнадцатеричное значение #fff
  2. Нажмите кнопку и установите шестнадцатеричное значение #000
  3. Используйте пипетку, чтобы найти целевой цвет в спектре «Альфа / Непрозрачность», затем нажмите на спектр, чтобы получить значение непрозрачности.
thdoan
источник
0

Найти эту формулу - отличное упражнение в линейной алгебре. Используя RGB и линейную алгебру, я придумал эту матрицу M. Если вы хотите объединить RGBred = (237,32,36) и RGBblue = (60,84,165), где нижний слой имеет непрозрачность 100%, а верхний слой - 50%. Затем непрозрачность умножить Mv, где M - матрица ниже и v = (237,32,36,60,84,165). Мы получаем Mv = (157,777,71,444,107,444).

Фактическое значение - (159,71,103), поэтому мы довольно близки, но есть некоторая ошибка - возможно, либо потому, что я использовал округленные значения для вычисления M, и / или потому, что, возможно, он не использует RGB, но какой-то другой масштаб для вычисления прозрачности уплощение. Возможно, я мог бы получить более точную матрицу, используя подход типа наименьших квадратов, но я был слишком ленив.

Матрица МИ получила это

M=[-0.316438695251802233798084520470 -0.0205011495462359668020633451463 -0.627769626184202308338411657855 
    4.83088877248122926488562947487 -0.673109830626855247075257552051 0.137681159420289855072463768116]
[2.67597831835520455938498494132 0.215715090307662822540065922133 1.69848459052630338054958974280 -13.9750196437925615505500261925 
    3.20021608171817705605028810915 -0.370471014492753623188405797101]
[-6.62632375526968419148486246260 0.509833585674322977062528534400 -3.14436345482363613544439381045 35.0629474419416797625283743688
    -6.69242186135847738781211803779 1.41304347826086956521739130435]
Кристин МакМекин
источник