我正在尝试将在Photoshop中创建的一些效果转换为与php / imagemagick一起使用的代码。现在我对如何重新创建Photoshop的RGB级别功能特别感兴趣。我对Photoshop界面并不熟悉,但这是我给出的信息:
RGB Level Adjust
Input levels: Shadow 0, Midtone 0.92, Highlight 255
Output levels: Shadow 0, Highlight 255
输入电平与输出电平有什么关系?我如何将其翻译成ImageMagick?下面你可以看到我尝试了什么,但它没有正确呈现所需的效果(将Photoshop的0-255比例转换为0-65535):
$im->levelImage(0, 0.92, 65535);
$im->levelImage(0, 1, 65535);
由于参数名称没有排列,所以这主要是在黑暗中刺伤,而对于输出级别,参数的数量甚至不匹配。基本上我不清楚当photoshop应用调整时到底发生了什么。我认为这是我现在最大的障碍。一旦我得到它,我需要在ImageMagick中找到相应的效果。
任何人都可以了解Photoshop中发生的事情以及如何使用ImageMagick复制它吗?
答案 0 :(得分:3)
阴影,中间调和高光是指在一定范围的光度范围内的颜色。例如,阴影是光度直方图的较低范围,中间色是中间的颜色,而高光是高亮的。但是 - 你不能对这些值使用硬限制,这就是为什么你必须使用这样的曲线来加权直方图(一个像素可能同时位于多个范围内)。
要分别调整阴影,中间调和高光,您需要为每个像素创建一个加权和,使用当前阴影,中间调和高光值来创建结果值。
我认为您不能使用ImageMagick API直接执行此操作 - 也许您只需将其编写为过滤器。
希望这有帮助。
答案 1 :(得分: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);
}
这假设blackpoint和whitepoint的levelImage参数的范围为0-255。它们实际上可能是您系统上的0-65535。如果是这样的话就可以轻松调整它。您还可以使用$ im-> getQuantumRange()检查您的设置使用的值。它将返回一个包含字符串版本和量程长版本的数组。从那里开始,应该很容易规范化值或只使用新的范围。
答案 2 :(得分:1)
参见documentation:第一个值是黑点(阴影)输入值,中间是伽马(我猜测它与Photoshop的中点相同),最后一个是白点(突出显示)输入值。
输出值固定在图像类型的量子值上,不需要指定它们。