クリエイター手抜きプロジェクト[445]Adobe Photoshop CS3〜CC 2015編 何も描かれていないレイヤーにラベルカラーを設定する/古籏一浩

投稿:  著者:  読了時間:7分(本文:約3,400文字)



今回は、前々回のスクリプトを変更して、何も描かれていないレイヤーにラベルカラーを設定するようにしたものです。何色を付けるかは

setLayerColor("緑色");

の行で変更できます。無色にしたい場合は

setLayerColor("無色");

のように変更します。他の色名としては、「赤色」「橙色」「黄色」「緑色」「青色」「紫色」「灰色」を指定することができます。前回と同様に、レイヤーパネルで何かレイヤーを選択してから実行しないと、エラーで動作しないので注意してください。





// 空っぽのレイヤーにラベルカラーを設定する
var list = getAllLayer(app.activeDocument, []); // すべてのレイヤーを取得する
var count = 0; // 空っぽのレイヤーの数を入れる変数
for(var i=0; i<list.length; i++){
if (checkEmptyLayer(list[i])){
app.activeDocument.activeLayer = list[i]; // レイヤーをアクティブにする
setLayerColor("緑色");
count++;
}
}
if (count > 0){
alert("空っぽのレイヤーが"+count+"個ありました");
}else{
alert("空っぽのレイヤーはありませんでした");
}
// 内容が空っぽかどうか調べる関数
function checkEmptyLayer(layObj){
var rect = layObj.bounds;
var left = parseFloat(UnitValue(rect[0], "px"));
var top = parseFloat(UnitValue(rect[1], "px"));
var right = parseFloat(UnitValue(rect[2], "px"));
var bottom = parseFloat(UnitValue(rect[3], "px"));
if ((left == 0) && (top == 0) && (right == 0) && (bottom == 0)){
return true; // レイヤーは空っぽだった
}
return false;
}
// レイヤーセットを除くすべてのレイヤーオブジェクトを取得する
function getAllLayer(obj, ary){
for(var i=0; i<obj.layers.length; i++){
if (obj.layers[i].kind){ // レイヤーセット以外の場合
ary.push(obj.layers[i]);
}else{ // レイヤーセットなので再帰
getAllLayer(obj.layers[i], ary);
}
}
return ary; // 結果は配列で返す
}
// ラベルカラーを設定する
function setLayerColor(colorName){
var list = [
{ name : "なし", value: "None" },
{ name : "レッド", value: "Rd " },
{ name : "オレンジ", value: "Orng" },
{ name : "イエロー", value: "Ylw " },
{ name : "グリーン", value: "Grn " },
{ name : "ブルー", value: "Bl " },
{ name : "バイオレット", value: "Vlt " },
{ name : "グレー", value: "Gry " },
{ name : "無色", value: "None" },
{ name : "赤色", value: "Rd " },
{ name : "橙色", value: "Orng" },
{ name : "黄色", value: "Ylw " },
{ name : "緑色", value: "Grn " },
{ name : "青色", value: "Bl " },
{ name : "紫色", value: "Vlt " },
{ name : "灰色", value: "Gry " }
];
var cName = "None"; // 無色に設定
for(var i=0; i<list.length; i++){
if (list[i].name == colorName){
cName = list[i].value;
break;
}
}
var idsetd = charIDToTypeID( "setd" );
var desc20 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref13 = new ActionReference();
var idLyr = charIDToTypeID( "Lyr " );
var idOrdn = charIDToTypeID( "Ordn" );
var idTrgt = charIDToTypeID( "Trgt" );
ref13.putEnumerated( idLyr, idOrdn, idTrgt );
desc20.putReference( idnull, ref13 );
var idT = charIDToTypeID( "T " );
var desc21 = new ActionDescriptor();
var idClr = charIDToTypeID( "Clr " );
var idClr = charIDToTypeID( "Clr " );
var idRd = charIDToTypeID( cName ); // 色を設定
desc21.putEnumerated( idClr, idClr, idRd );
var idLyr = charIDToTypeID( "Lyr " );
desc20.putObject( idT, idLyr, desc21 );
executeAction( idsetd, desc20, DialogModes.NO );
}


なお、アラートダイアログの表示は不要だという方は、以下の5行を削除してください。

if (count > 0){
alert("空っぽのレイヤーが"+count+"個ありました");
}else{
alert("空っぽのレイヤーはありませんでした");
}


【古籏一浩】openspc@alpha.ocn.ne.jp
http://www.openspc2.org/

可愛い女の子の絵を描くために(ゲームの立ち絵を描くのが主目的。外注費がないから自前で←多分一番コスト高い気がしないでもない)何冊も本を購入。

まあ、山積みになっているわけですが、ほとんど上達せず。理由は購入した本がロジカルじゃないから。だいたい論理・理屈大好きなプログラマにとって、感性で描く絵などは大敵。でも、それなら3DCGでやればいいじゃんということになるのですが、やはり手書きでやりたいわけで。

少しでもロジカルなお絵かき本がないかということで、以下の本を購入。

・絵はすぐに上手くならない
http://www.amazon.co.jp/dp/4779121183

これは他の本と違い、読んでも上手くなるわけでもデッサンがうまくなるわけでもなし。というのも、絵を描く前に読む本で、この本の後に自分の必要な本を購入したり、何を練習すればよいかが分かるというもの。

で、P62のデッサンしてツイートしたら、著者からアドバイスが……。まあ、どのみち練習しないといけないけど、不要な練習や向いてない練習をする必要がなくなっただけでも助かります。

・JavaScriptによるデータビジュアライゼーション入門
http://www.amazon.co.jp/dp/4873117461/

・Photoshop自動化基本編
http://www.amazon.co.jp/dp/B00W952JQW/

・Illustrator自動化基本編
http://www.amazon.co.jp/dp/B00R5MZ1PA

・Adobe JavaScriptリファレンス
http://www.amazon.co.jp/dp/B00FZEK6J6/

・ExtendScript Toolkit(ESTK)基本編
http://www.amazon.co.jp/dp/B00JUBQKKY/

・データビジュアライゼーションのためのD3.js徹底入門
http://www.amazon.co.jp/dp/4797368861

・4K/ハイビジョン映像素材集
http://www.openspc2.org/HDTV/

・クリエイター手抜きプロジェクト
http://www.openspc2.org/projectX/