ランダムに猫の足跡を描く (Photoshop CS2)

ランダムに猫の足跡を描くスクリプトです。Photoshopにはシェイプとして(ベクトルデータとして)猫の足あとが登録されています。しかし、JavaScriptリファレンスガイドを見てもShapeというオブジェクトが存在しないため、手軽にシェイプ図形を処理することができません。

そこで、以前にも説明したScripting Listenerを利用します。スクリプトのfunction drawShape(){〜}がScrpting Listenerで生成したものになります。これに手を加えて任意のシェイプ図形と任意の座標に描くように改造してあります。Photoshop CS2では問題なく動作しますが、それ以前のCSなどでは大量生成するとPhotoshop自体が落ちてしまうことがあるので注意が必要です。


for (i=0; i<30; i++)
{
x = Math.floor(Math.random() * activeDocument.width);
y = Math.floor(Math.random() * activeDocument.height);
drawShape("猫の足跡", x+0, y+0, x+50, y+50);
}

function drawShape(shapeName, t, l, b, r)
{
var id18 = charIDToTypeID( "Mk " );
var desc3 = new ActionDescriptor();
var id19 = charIDToTypeID( "null" );
var ref1 = new ActionReference();
var id20 = stringIDToTypeID( "contentLayer" );
ref1.putClass( id20 );
desc3.putReference( id19, ref1 );
var id21 = charIDToTypeID( "Usng" );
var desc4 = new ActionDescriptor();
var id22 = charIDToTypeID( "Type" );
var id23 = stringIDToTypeID( "solidColorLayer" );
desc4.putClass( id22, id23 );
var id24 = charIDToTypeID( "Shp " );
var desc5 = new ActionDescriptor();
var id25 = charIDToTypeID( "Nm " );
desc5.putString( id25, shapeName );
var id26 = charIDToTypeID( "Top " );
var id27 = charIDToTypeID( "#Pxl" );
desc5.putUnitDouble( id26, id27, t );
var id28 = charIDToTypeID( "Left" );
var id29 = charIDToTypeID( "#Pxl" );
desc5.putUnitDouble( id28, id29, l );
var id30 = charIDToTypeID( "Btom" );
var id31 = charIDToTypeID( "#Pxl" );
desc5.putUnitDouble( id30, id31, b );
var id32 = charIDToTypeID( "Rght" );
var id33 = charIDToTypeID( "#Pxl" );
desc5.putUnitDouble( id32, id33, r );
var id34 = stringIDToTypeID( "customShape" );
desc4.putObject( id24, id34, desc5 );
var id35 = stringIDToTypeID( "contentLayer" );
desc3.putObject( id21, id35, desc4 );
executeAction( id18, desc3, DialogModes.NO );
}


[サンプルをダウンロード]