Почему python-colormath не может конвертировать sRGB в Adobe RGB?

Это кажется такой простой проблемой, именно для этого и был разработан colormath. Но вызов convert_color возвращает тот же объект, который был передан. Согласно документации неудачное преобразование должно вызывать UndefinedConversionError, а не возвращать объект.

>>> from colormath.color_objects import sRGBColor, AdobeRGBColor
>>> from colormath.color_conversions import convert_color
>>> srgb = sRGBColor(0.0, 1.0, 0.0)
>>> srgb
sRGBColor(rgb_r=0.0,rgb_g=1.0,rgb_b=0.0)
>>> argb = convert_color(srgb, AdobeRGBColor)
>>> argb
sRGBColor(rgb_r=0.0,rgb_g=1.0,rgb_b=0.0)
>>> argb is srgb
True

Он работает для преобразования в Lab, поэтому я не уверен, в чем может быть проблема.

>>> from colormath.color_objects import LabColor
>>> convert_color(srgb, LabColor)
LabColor(lab_l=87.73500278716472,lab_a=-86.1829494051608,lab_b=83.1795364492565)

person Mark Ransom    schedule 16.06.2016    source источник


Ответы (1)


Содержимое переменной conversion в convert_color определение, используемое в вашем примере, представляет собой пустой список, что означает, что преобразование не требуется, поэтому определение не является ошибочным и возвращает new_color, который инициализируется вашим исходным цветом sRGB. Я не совсем уверен, почему это так.

Кроме того, я являюсь сопровождающим другого Python API Colour Science, который подойдет для вашего случая, однако он, вероятно, более сложен, чем colormath, потому что не абстрагирует преобразования:

import colour

colour.RGB_to_RGB(
  (0, 1, 0), 
  colour.models.sRGB_COLOURSPACE, 
  colour.models.ADOBE_RGB_1998_COLOURSPACE)


# array([ 0.28488056,  1.        ,  0.04116936])
person Kel Solaar    schedule 17.06.2016