AEJoy —— 表达式之从图像中采样颜色数据【JS】

490 阅读2分钟

效果图

使用 sampleImage() 从背景层拾取颜色

097.gif

想法

自从表达式出现以来,表达式作者就一直想要一种访问层的颜色和 alpha 像素数据的方法。已经有一些第三方解决方案,但是随着 AE CS3 的到来,我们现在有了一种优雅而强大的方法来获取这些数据。在这里,我们将使用这个新工具给一些小的动画化的层上色,基于当前的背景层的底层颜色。我们想让图层从背景层的当前位置拾取颜色。

设计

我们将使用纯色,箭头形状的层来进行采样。并使用 wiggle() 让它们在背景层上移动。对于每个纯色层,我们将应用填充效果,并将我们的表达式应用到效果的颜色参数上。

我们将使用新的图层方法 sampleImage() 来访问背景图像的颜色数据。它接受四个参数(最后两个是可选的)。

第一个参数 指定了提取样本的位置(在被采样层的层空间内)。因为我们将采样一个不移动的背景层,它的大小与合成相同,它的层空间也与合成空间相同。这将允许我们简单地使用层的合成位置作为采样点进行采样。

第二个参数 定义颜色和 alpha 数据平均值的样本区域。在这里,我们要对箭头图层下的颜色取平均,所以我们将以箭头的宽度和高度作为样本区域的基础。该参数是一个双元素数组,指定从样本区域中心到边缘的水平和垂直距离。在这个例子中,我们需要将采样层的宽度和高度除以2。

第三个参数 指定是在蒙版和效果应用之前还是之后对图层的颜色和 alpha 进行采样。这个参数默认为 true ,这意味着采样是在蒙版和效果应用后 进行的。

最后一个参数 指定了采样的时间。该参数的默认值为当前计算时间。

表达式代码

target = thisComp.layer("background");

/// @note 在箭头位置对背景层图像进行(区域)采样
target.sampleImage(transform.position, [width, height]/2, true, time)