Вопрос по – Уровни RGB в Photoshop с помощью ImageMagick

3

Я пытаюсь преобразовать некоторые эффекты, созданные в Photoshop, в код для использования с php / imagemagick. Прямо сейчас меня особенно интересует, как воссоздать функцию уровней RGB в Photoshop. Я не очень знаком с интерфейсом Photoshop, но это информация, которую мне дают:

RGB Level Adjust
  Input levels: Shadow 0, Midtone 0.92, Highlight 255
  Output levels: Shadow 0, Highlight 255

Какова точность входных уровней по сравнению с выходными? Как бы я перевести это в ImageMagick? Ниже вы можете увидеть, что я пробовал, но это не правильно отображает желаемый эффект (преобразование масштаба 0-255 в Photoshop в 0-65535):

$im->levelImage(0, 0.92, 65535);
$im->levelImage(0, 1, 65535);

Это был в основном удар в темноте, поскольку имена параметров не совпадают, а для выходных уровней количество параметров даже не совпадает. По сути, я не совсем понимаю, что происходит, когда фотошоп применяет настройку. Я думаю, что это мое самое большое препятствие прямо сейчас. Как только я это получу, мне нужно будет найти соответствующие эффекты в ImageMagick.

Может кто-нибудь пролить свет на то, что происходит в Photoshop и как воспроизвести это с помощью ImageMagick?

Я не уверен, что он хочет получить разъяснения по использованию API настолько, насколько он хочет понять, как воспроизвести эффект Photoshop, используя его. Ani

Ваш Ответ

3   ответа
3

Midtones и Highlights - это цвета, которые попадают в определенный диапазон яркости. Например, тени - это нижний диапазон гистограммы яркости, средние тона - это цвета в середине, а блики - те, что находятся высоко. Однако вы не можете использовать жесткий предел для этих значений, поэтому вам придется использовать такие кривые, которые взвешивают гистограмму (пиксель может находиться в нескольких диапазонах одновременно).

Чтобы настроить тени, средние тона и блики по отдельности, вам потребуется создать взвешенную сумму на пиксель, которая использует текущие значения тени, среднего тона и выделения для создания результирующего значения.

Я не думаю, что вы можете сделать это напрямую с помощью API ImageMagick - возможно, вы могли бы просто написать это как фильтр.

Надеюсь это поможет

Насколько я понимаю, тени и блики - это параболы, верно? Но какова будет формула этого? Maksim Sorokin
@ МаксимСорокин Нет - они гауссианцы En.wikipedia.org / вики / Gaussian_function) соответствующим образом масштабируется и переводится. Ani
3

http: //www.fmwconcepts.com/imagemagick/levels/index.ph

Основываясь на полученной там информации, я смог придумать следующий php, который кажется довольно эффективным для имитации того, что Photoshop делает с вводом и выводом и всем этим.

function levels($im, $inshadow, $midtone, $inhighlight, $outshadow, $outhighlight, $channel = self::CHANNEL_ALL) {
    $im->levelImage($inshadow, $midtone, $inhighlight, $channel);
    $im->levelImage(-$outshadow, 1.0, 255 + (255 - $outhighlight), $channel);
}

Это предполагает, что параметры levelImage для черной точки и белой точки находятся в масштабе 0-255. На самом деле они могут быть 0-65535 в вашей системе. Если это так, это достаточно просто отрегулировать. Вы также можете проверить, какое значение использует ваша установка, с помощью $ im-> getQuantumRange (). Он вернет массив с строковой версией и длинной версией кванта. Оттуда должно быть достаточно просто нормализовать значения или просто использовать новый диапазон.

любой способ реализовать это в GD? alphablender
У тебя был бы полный рабочий пример? Или как код наносится на изображение? Это то, что мне нужно. Panama Jack
$ im - объект IMagick (в него должно быть предварительно загружено изображение). Просто примените код, который вы видите выше, к своему изображению IMagick. gregghz
Кто-нибудь может объяснить, как допустимо значение - $ outshadow? Я понимаю, что входные значения для levelImage должны быть между 0-255, что происходит с отрицательным значением? Кроме того, значение outhighlight (255 + (255 - $ outhighlight)) всегда будет 255 или выше? Еще раз я думал, что levelImage хочет значение между 0-255? Ravean
1

документаци: Первое значение - это входное значение черной точки (тени), середина - это гамма (которая, как я предполагаю, совпадает со средней точкой Photoshop), а последнее - входное значение белой точки (выделение).

Выходные значения фиксируются на квантовых значениях типа изображения, указывать их не нужно.

Посмотрите, но это более или менее то, что я пробовал, и это не дает такие же результаты, как в Photoshop gregghz
@ greggory.hz «не дает одинаковых результатов» не очень наглядно. Помогите нам помочь вам. Mark Ransom
Ты прав, это не очень наглядно. Но это было сделано намеренно, так как я надеюсь на индивидуальное сопоставление фотошопа с магией изображений. Я подозреваю, что это маловероятно. Так что если бы вместо этого, я был бы в восторге от ресурсов, чтобы понять, как работают уровни rgb в Photoshop, чтобы я мог получить знания низкого уровня для правильной (а не просто бесцельной) настройки для достижения желаемых результатов. gregghz
@ greggory.hz Посмотрите мой ответ выше, он нацелен именно на это. Ani
@ greggory.hz, я не использую ни Photoshop, ни ImageMagick, но знаю достаточно об основах, чтобы дать правильный ответ, если бы я не работал вслепую. На основании имеющейся у меня информации, либо$im->levelImage(0, 0.92, 65535); или$im->levelImage(0, 0.92, 255); должен быть в точности эквивалентен Photoshop. Если это не так, скажите, пожалуйста, как далеко. Mark Ransom

Похожие вопросы