3

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

4

3 回答 3

3

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

阴影、中间调和高光

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

我不认为你可以直接使用 ImageMagick API 来做到这一点——也许你可以简单地把它写成一个过滤器。

希望这可以帮助。

于 2012-05-22T20:37:57.427 回答
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() 检查您的设置使用的值。它将返回一个带有字符串版本和长版本量子的数组。从那里应该很容易标准化值或只使用新范围。

于 2012-05-23T20:41:12.450 回答
1

查看文档:第一个值是黑点(阴影)输入值,中间是一个伽玛(我猜这与 Photoshop 的中点相同),最后一个是白点(高光)输入值。

输出值固定为图像类型的量子值,无需指定。

于 2012-05-22T18:31:33.010 回答