Формула для з’ясування результату кольору після нанесення на нього x% непрозорості?


10

У мене 2 кольори

  1. #a1a2a4
  2. чорний ( #000000)
  3. білий ( #ffffff)

Тепер мені потрібно знати, скільки непрозорості (у відсотках) потрібно застосувати до другого кольору (чорного) на тлі третього кольору (білого), щоб досягти кольору, "найближчого" (як визначає око) до першого колір ( #a1a2a4).

Як мені це робити?


Дивіться також graphicsdesign.stackexchange.com/questions/2204/… про інше
Jari Keinänen

Мене трохи бентежить ваше формулювання: ви хочете, щоб той, grayякий за тоном найближчий до вказаного кольору, правильно?
horatio

Відповіді:


6

Цей випадок більш-менш простий (ви маєте справу з чорно-білими).

Після застосування кольору (# a1a2a4) перевірте рівні RGB:

Рівень RGB

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

162 * 100/255 = ~ 63,5%

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

100 - 63,5 = 36,5%

Тож якщо ви застосуєте 36% непрозорості, він буде мати цей колір, я просто його протестував.

Звичайно, у випадках із складнішими кольорами цей метод не працює, і я не знаю способу отримати відсоток, я б робив класичну пробу та помилку.


4

Питання, якщо я правильно це розумію, - "Як би ви це програмно обчислили ?" Перетворити цільовий "колір" в альфа-значення просто.

Білий == [1,1,1] або #ffffff або 255,255,255, залежно від вашої заявки. Чорний == [0,0,0] тощо.

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


Це якийсь серйозно сексуальний підліт. 8)
Лорен-Ясний-Моніка-Іпсум

3
Чому, дякую! <налаштовує кишеньковий протектор, забезпечує ручки рівномірно розташовані>
Алан Гілбертсон

0

Трохи швидший варіант проб і помилок:

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

Створіть два шари, верхній чорний і нижній білий.

Підніміть вікно Інформація. Окремо підтягніть вікно "Шари".

Грайте з непрозорістю чорного шару. Використовуйте крапельку для очей за своїм кольором та перевірте у інформаційному вікні, щоб побачити, наскільки ви близькі. Це здебільшого економить час непрозорості зміни - вирівняти - перевірити колір - скасувати згладити.


Ти маєш рацію, але є набагато прискіпливіший спосіб зробити це. 8-D
Алан Гілбертсон

0

Враховуючи кольори переднього плану та фону (рівномірні значення для каналів R, G та B), ви не можете досягти неоднорідного кольору #a1a2a4, змінивши непрозорість, оскільки непрозорість впливає на всі канали одразу. Однак ви можете досягти "досить близького" кольору #a1a1a1, встановивши непрозорість чорного кольору 0.37. Ось інструмент, який я використав:

http://colorizer.org/

  1. Клацніть «Фон» та встановіть значення шістнадцяткової #fff
  2. Клацніть «Кнопка» і встановіть значення шістнадцяткової #000
  3. Використовуйте утиліту «Піпетка», щоб знайти цільовий колір у спектрі «Альфа / Непрозорість», а потім натисніть на спектр, щоб отримати значення непрозорості.

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), тому ми досить близькі, але є певна помилка - ймовірно, тому, що я використовував округлені значення для обчислення М та / або тому, що, можливо, він не використовує RGB, а якусь іншу шкалу для обчислення прозорості сплющення. Можливо, я міг би отримати більш точну матрицю за допомогою підходу типу найменших квадратів, але я був занадто ледачим.

Матриця MI отримана є

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]
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.