Photoshop的RGB级别与ImageMagick

时间:2012-05-22 18:17:52

标签: image-processing imagemagick photoshop

我正在尝试将在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复制它吗?

3 个答案:

答案 0 :(得分:3)

阴影,中间调和高光是指在一定范围的光度范围内的颜色。例如,阴影是光度直方图的较低范围,中间色是中间的颜色,而高光是高亮的。但是 - 你不能对这些值使用硬限制,这就是为什么你必须使用这样的曲线来加权直方图(一个像素可能同时位于多个范围内)。

Shadows, MidTones and Highlights

要分别调整阴影,中间调和高光,您需要为每个像素创建一个加权和,使用当前阴影,中间调和高光值来创建结果值。

我认为您不能使用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的中点相同),最后一个是白点(突出显示)输入值。

输出值固定在图像类型的量子值上,不需要指定它们。