【问题标题】:Photoshop's RGB levels with ImageMagickPhotoshop 的 RGB 级别与 ImageMagick
【发布时间】:2012-05-29 06:44:32
【问题描述】:

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

【问题讨论】:

标签: image-processing imagemagick photoshop


【解决方案1】:

所以我偶然发现了这个网站: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() 检查您的设置使用的值。它将返回一个带有字符串版本和长版本量子的数组。从那里可以很容易地对值进行标准化或只使用新范围。

【讨论】:

  • 有什么方法可以在 GD 中实现吗?
  • 你有一个完整的工作示例吗?或者代码如何应用于图像?这是我需要的东西。
  • $im 是一个 IMagick 对象(之前应该已将图像加载到该对象中)。只需将您在上面看到的代码应用到您的 IMagick 图像即可。
  • 谁能解释 -$outshadow 值是如何有效的?我知道 levelImage 的输入值应该在 0-255 之间,负值会发生什么? (255 + (255 - $outhighlight)) 的突出显示值也不总是 255 或更高吗?我又一次认为 levelImage 想要一个介于 0-255 之间的值?
【解决方案2】:

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

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

我认为您不能直接使用 ImageMagick API 来执行此操作 - 也许您可以简单地将其编写为过滤器。

希望这会有所帮助。

【讨论】:

【解决方案3】:

documentation:第一个值是黑点(阴影)输入值,中间是一个gamma(我猜和Photoshop的中点一样),最后一个是白点(高亮) 输入值。

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

【讨论】:

  • 看,但这或多或少是我尝试过的,它不会产生与 Photoshop 中相同的结果
  • @greggory.hz,“不会产生相同的结果”不是很具有描述性。帮助我们帮助您。
  • 你是对的,这不是很具描述性。但这是故意的,因为我希望从 photoshop 到 image magick 进行一对一的映射。我怀疑这不太可能。因此,如果不是那样的话,我会很高兴有资源来了解 Photoshop 的 rgb 级别是如何工作的,这样我就可以获得低级别的知识来适当地调整(而不是漫无目的地)以实现我想要的结果。
  • @greggory.hz 请参阅上面的答案,它旨在做到这一点。
  • @greggory.hz,我既不使用 Photoshop 也不使用 ImageMagick,但如果我没有盲目工作,我对基础知识的了解足以提供正确的答案。根据我掌握的信息,$im->levelImage(0, 0.92, 65535);$im->levelImage(0, 0.92, 255); 应该完全等同于 Photoshop。如果不是,请告诉我距离有多远。
猜你喜欢
  • 2017-09-03
  • 2011-06-22
  • 2014-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多