特定の座標の色を変数に入れようと思ったけど、直接取得するような関数が見つからなかったので作成。
ExtendScript Toolkit
AdobeのアプリケーションをJavaScriptで自動化するためのツール。
アプリケーションのメニューバーからAfterEffectsCC2015の場合、「ファイル」->「スクリプト」->「スクリプトエディタを開く」
でExtendScript Toolkitを開いて、そこにスクリプトを書き込んで実行可能。
内容
スポイトのような機能を持った関数が見つからないので、平面レイヤーを一時的に追加して、そこに「塗り」エフェクトを追加。追加したエフェクトにエクスプレッションを追加してそこにsampleImageで座標の色を取得して平面レイヤーにその色を適用。その適用された色を値として出力するという、かなり遠回りな方法をとった。
この辺のページを参考にしました。
https://www.wgn.co.jp/store/blog/item-1436.html
https://forums.adobe.com/thread/1902410
AfterEffects
function getLayerPositionColor(argumentCompName,argumentLayerName,argumentPositionArray){
///コンポジションを特定
var targetComp;
for(var i=1;i<=app.project.numItems;i++){
if(argumentCompName==app.project.item(i).name){
targetComp = app.project.item(i);
}
}
///仮の作業用平面を作成。
var target = targetComp.layers.addSolid([0, 0, 0], "getLayerPositionColorBox", 2, 2, 1.0);
///「塗り」エフェクトの追加
var addColorControl = target.Effects.addProperty("塗り");
///エクスプレッションの記載内容の文字列作成
var expr = "thisComp.layer(\""+argumentLayerName+"\").sampleImage(["+String(argumentPositionArray)+"], [.5, .5]);";
///アニメーション->エクスプレッションを追加
addColorControl.property("カラー").expressionEnabled = true;
addColorControl.property("カラー").expression = expr;
///結果のデータを取得
var values = addColorControl.property("カラー").value;
target.remove();
return values;
}
///使用例
var rgb;
rgb = getLayerPositionColor("対象のコンポジション","レイヤー名",[10,10]);
///getLayerPositionColor("対象のコンポジション","レイヤー名",[X座標,Y座標]);
$.writeln(rgb);