GIMP не объединяет слои так, как я ожидал

У меня есть опыт обработки изображений, но я новичок в GIMP. Я экспериментировал с объединением слоев с прозрачностью, и значения пикселей, которые вычисляет GIMP, не согласуются с уравнением, которое я видел на веб-сайтах GIMP и Photoshop.

Вот конкретный пример. Математика здесь применима к одному пикселю, но для удобства я предполагаю, что у меня везде есть изображения с одинаковым значением пикселя. Начните с 4-канального изображения, где все значения RGB равны 128, а альфа-слой — все 255, или как дробь 1,0. Используйте это как базовый слой. Теперь поместите поверх этого еще один слой со значениями RGB, равными 0, и значением альфа, равным 191, или в виде дроби 191/255 = 0,749. Когда эти слои объединяются в GIMP, я думал, что это делается математически с использованием следующего уравнения: выходное значение = basePixel * (1 - topAlpha) + topPixel * (topAlpha) = 128 * (1 - 0,749) + 0 * 0,749 = 32. Это не то, что я получаю с GIMP. Я получаю значение 66. Очевидно, я использую неправильное уравнение. Кто-нибудь знает ответ?

Я должен отметить, что уравнение работает, когда верхний слой равен 255, но не работает, когда верхний слой темный, например 0, как в моем примере. Это наводит меня на мысль, что GIMP не использует уравнение, представленное выше.

Что бы это ни стоило, режим наложения установлен на нормальный.

Вот снимок экрана.128 grey alpha 255 base, 0 черный верхний слой непрозрачность 75%

Ваши комментарии о Legacy, Default и Gamma мне чужды. Мне непонятно, как они повлияют на ответ.

Ответы (1)

Лучше использовать 0.0 ... 1.0значения для каналов RGB. Итак, поместите белый слой (1.0,1.0,1.0)(он же (255,255,255)) с непрозрачностью 0,75 над слоем (0.5,0.5,0.5)(ака (127,127,127)):

output= 0.5*(1.00-0.75) + 1.00*0.75
      = 0.5*0.25 + 0.75
      = 0.125 + 0.750
      = 0.875

А 0.875в 0..255ассортименте есть 223. Но даже используя 0 ... 255диапазон:

output= 128*(1.00-0.75) + 255*0.75
      = 128*0.25 + 191.5
      = 32 + 191.25
      = 223

И инструмент Pointer соглашается:

введите описание изображения здесь

С черным и альфа = 0,75 поверх 128:

output= 128*(1.00-0.75) + 0*0.75
      = 128*0.25 + 0.0
      = 32 + 0
      = 32

И инструменты указателя соглашаются с этим:

введите описание изображения здесь

PS: также зависит от того, о каком Gimp мы говорим. Вышесказанное верно для:

  • Гимп 2.8
  • Gimp 2.10 в Legacy Normalрежиме гамма изображения
  • Gimp 2.10 в Default Normalрежиме линейного освещения

И работает так, как вы сообщаете в 2.10, используя Default Normalгамма-изображение, которое должно подразумевать преобразование в линейное, затем композицию, а затем обратное преобразование в гамму.

Да, это работает, когда верхний слой равен 255, как в вашем примере, но не работает, когда верхний слой темный, например 0, как в моем примере. Это наводит меня на мысль, что GIMP использует другое уравнение.
Он по-прежнему работает с черным верхним слоем, см. Отредактированный ответ. Можете ли вы добавить скриншот, похожий на мой, в свой вопрос?
Также зависит, если Default/Legacy против Gamma/Linear в Gimp 2.10.
Я новичок в обмене стеками. Я не уверен, отвечаю ли я комментариями или добавляя к исходному вопросу. Также пытаюсь выяснить, как прикрепить изображение.
Когда я переключаюсь с Перцептивной гаммы на Линейный свет, 66 меняется на 14. Вы получаете 32. Интересно. Я поищу кнопки Legacy и Normal.
Я не вижу настроек Legacy, Default, Normal. Похоже, вы указали мне правильное направление, но я еще не нашел решения.
Default/Legacy — это значок со стрелкой в ​​виде круга справа от селектора режима слоя.
Эй, это было так. Когда я переключил его с «По умолчанию» на «Наследие», я начал получать значения, которые ожидал. Большое спасибо за наводку. Теперь я могу прочитать о том, что делают эти кнопки. Я был действительно сбит с толку.