Уровни RGB в Photoshop с помощью ImageMagick
Я пытаюсь преобразовать некоторые эффекты, созданные в 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?
3 ответа
Поэтому я наткнулся на этот сайт: http://www.fmwconcepts.com/imagemagick/levels/index.php
Основываясь на полученной информации, я смог придумать следующий 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(). Он вернет массив с строковой версией и длинной версией кванта. Оттуда должно быть достаточно легко нормализовать значения или просто использовать новый диапазон.
Тени, полутона и блики - это цвета, которые попадают в определенный диапазон яркости. Например, тени - это нижний диапазон гистограммы яркости, средние тона - это цвета в середине, а блики - те, что находятся высоко. Однако вы не можете использовать жесткое ограничение для этих значений, поэтому вам придется использовать такие кривые, которые взвешивают гистограмму (пиксель может находиться в нескольких диапазонах одновременно).
Чтобы настроить тени, средние тона и блики по отдельности, вам потребуется создать взвешенную сумму на пиксель, которая использует текущие значения тени, среднего тона и выделения для создания результирующего значения.
Я не думаю, что вы можете сделать это напрямую, используя API ImageMagick - возможно, вы могли бы просто написать это как фильтр.
Надеюсь это поможет.
См. Документацию: первое значение - это входное значение черной точки (тени), середина - это гамма (которая, как я предполагаю, совпадает со средней точкой фотошопа), а последнее - входное значение белой точки (выделения).
Выходные значения фиксируются на квантовых значениях типа изображения, указывать их нет необходимости.