Как я могу конвертировать Майред в RGB или отображать Майред в css? - PullRequest
1 голос
/ 20 марта 2020

Из приложения я получаю цветовую температуру в майредах, я хочу отобразить ее в поле HTML, но я не могу найти способ отобразить ее через майреды. Я думал, что где-нибудь в inte rnet есть ответ для его отображения или преобразования. Но, к сожалению, нет.

Кто-нибудь знает, как я могу преобразовать или отобразить его?

С уважением, Куно

1 Ответ

0 голосов
/ 21 марта 2020

Преобразование, которое вы хотите выполнить, может быть очень сложным в зависимости от требуемой степени точности. Вот схема алгоритма и реализация Python с использованием Цвет .

  1. M (Майред) - это MIcro REciprocal Degree (Color) Температура K (Кельвин). Таким образом, первым шагом является преобразование из Майреда в Кельвин следующим образом: K = 10e6 / M .
  2. Тогда цветовая температура K можно преобразовать в CIE xy Координаты цветности с использованием такого метода, как Kang et al. (2002) для простоты или если требуется предельная точность Робертсон (1968) или Оно (2013) (но это гораздо более сложный процесс преобразования в Javascript).
  3. Впоследствии, CIE xy Координаты цветности (эквивалентные CIE xyY с яркостью, установленной в 1), можно преобразовать в CIE XYZ Значения тристимула .
  4. Значения CIE XYZ тристимула можно преобразовать в sRGB Colourspace Values, в простейшем случае, это матричное умножение с использованием матрицы IEC 61966-2-1: 1999 .
  5. sRGB Значения цветового пространства нелинейно кодируются с помощью обратной электрооптической функции передачи sRGB .
  6. Наконец, нелинейный sRGB Значения цветового пространства преобразуются в шестнадцатеричное. Обратите внимание, что цвета переполняют 8-битный контейнер, поэтому вам необходимо их нормализовать.

Python Реализация ( Live Google Colab Notebook )

import colour
import colour.plotting
import numpy as np


def CCT_to_mired(K):
    return 10e6 / colour.utilities.as_float_array(K)


def mired_to_CCT(M):
    return 10e6 / colour.utilities.as_float_array(M)


M = CCT_to_mired(
    ['2000', '3000', '4000', '5000', '6000', '7000', '8000', '9000'])

K = mired_to_CCT(M)
xy = colour.CCT_to_xy(K, method='Kang 2002')
XYZ = colour.xy_to_XYZ(xy)
RGB = colour.XYZ_to_sRGB(XYZ)
# Note that the colours are overflowing 8-bit, thus a normalisation
# process must be used.
RGB /= np.max(RGB, axis=1)[..., np.newaxis]

colour.plotting.plot_multi_colour_swatches(
    [colour.plotting.ColourSwatch(RGB=np.clip(x, 0, 1)) for x in RGB])

print(colour.utilities.as_int_array(RGB * 255))
print(colour.notation.RGB_to_HEX(RGB))

# Conversion using the *Automatic Colour Conversion Graph*:
print(colour.convert(K, 'CCT', 'Hexadecimal', CCT_to_xy={'method': 'Kang 2002'}))

Mireds to sRGB

[[255 140  25]
 [255 184 111]
 [255 211 165]
 [255 230 207]
 [255 243 240]
 [244 242 255]
 [226 231 255]
 [214 223 255]]
['#ff8c19' '#ffb86f' '#ffd3a5' '#ffe6cf' '#fff3f0' '#f4f2ff' '#e2e7ff'
'#d6dfff']
['#7dd226' '#46ec8e' '#28f6c1' '#15fae2' '#08fcf9' '#fffd0a' '#f9fe17'
'#f4fe22']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...