Я хочу реализовать цветовое смешение, как описано в спецификации W3C для компоновки и смешивания. (Я делаю это в JavaScript, но язык не должен иметь большого значения для решения моей проблемы.)
В ретроспективе: во время реализации ответа на этот вопрос я понял, что это, вероятно, сделает для довольно приятного отдельного пакета. Если вам интересно, вы можете захватить его из npm.
До сих пор это было очень хорошо, но я хотел бы сделать эти алгоритмы еще одним шагом и добавить поддержку альфа-каналов. Благодаря спецификации SVG-компоновки, обеспечивающей все необходимые формулы, которые были не слишком сложными.
Но теперь я застрял в реализации режимов смешивания, которые спецификация W3C описывает как не разделяемые, которые (как известно из Photoshop ): оттенок, насыщенность, цвет и яркость.
К сожалению, алгоритмы для них недоступны в спецификации SVG, и я понятия не имею, как с ними работать. Я думаю, есть модифицированные версии формулы, предоставленные W3C для работы с альфа-каналами, которые мне не хватает.
Чтобы сделать мою проблему немного более визуальной, я покажу, что Photoshop дает мне оттенок, смешивающий два цвета:
Это то, что я также могу воспроизвести с помощью альфа-алгоритма из упомянутой спецификации W3C.
То, что я не могу воспроизвести, - это результат, который дает Photoshop, когда я добавляю нижнюю альфу как на исходный, так и на задний план:
Кто-нибудь знает, как добиться этого результата программно?
Обновление 1: Измененные иллюстрации (добавление кодов HSVA и RGBA), чтобы уточнить используемые цвета.
Обновление 2: Чтобы проверить возможные решения, я приложу два других примера смешивания Photoshop:
Обновление 3: Так получилось, что помимо того, что я не знаю понятия смешивания цветов, я также перепутал настройки Photoshop, поставив задачу решить мой вопрос Еще труднее. Исправлены примеры изображений для возможных будущих прохожих.