クリエイター手抜きプロジェクト[443]Adobe Photoshop CS3〜CC 2015編 何も描かれていないレイヤーがあるか調べる/古籏一浩

投稿:  著者:  読了時間:6分(本文:約2,800文字)



今回は、何も描かれていないレイヤーがあるか調べるスクリプトです。

Photoshopで間違って空のレイヤーを作成した場合や、見た目では何もないように見えるけど、実際にはピクセルが存在しているか確認したい場合に使います。

まず、以下のスクリプトは選択しているレイヤー(複数選択されているとだめなのでひとつだけ)が空っぽかどうかを調べます。なお、レイヤーパネルで何かレイヤーを選択してから実行しないと、エラーで動作しないので注意してください。





// アクティブレイヤーが空っぽかどうか調べる
var layObj = app.activeDocument.activeLayer;
if (checkEmptyLayer(layObj)){
  alert("レイヤーは空っぽです");
}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;
}


選択しているレイヤーだけを調べるというのは、あまり実用的ではないかもし
れません。そこで、すべてのレイヤー/サブレイヤーを調べて、空っぽのレイ
ヤーがあるかどうかを調べます。以下のスクリプトは空っぽのレイヤーがいく
つあるかを調べます。


// レイヤーが空っぽかどうかすべてのレイヤーを調べる
var list = getAllLayer(app.activeDocument, []); // すべてのレイヤーを取得する
var count = 0; // 空っぽのレイヤーの数を入れる変数
for(var i=0; i<list.length; i++){
  if (checkEmptyLayer(list[i])){
    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; // 結果は配列で返す
}


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

レトロゲーマーなので、あの映画を見に行かねば! ということで見てきました。ピクセル(PIXEL)

・ピクセル
http://www.pixel-movie.jp/

ギャラガが襲ってくるというのは、お〜なるほど、という感じ。でも、実際に戦闘するのはセンチピード。知らないゲームだ。

・センチピード
http://b9life.hatenablog.com/entry/2015/09/16/210341

最終的に戦うのは、ドンキーコングだけど、その前にパックマンとも戦う。だから主役はモンスター側。なんだけど、ここで(かなり最初の段階で)翻訳に違和感が……。

レトロゲームに詳しくない人が翻訳したのか、アメリカでの用語・名称になっているため、「え?」みたいなところが結構ある。そのまま横文字(カタカナ語)にされたのもあって何とも。DVD/Blurayで出すときには日本人にも分かる言葉にして欲しいところ。

この映画のように空中で立体的に敵を映し出して撃ちまくる、というのは将来的にできそうな気はする(プロジェクションマッピングは平面なので違う)。補償光学の際に利用するレーザーでガイド星を生成できるわけだから、レーザーをうまく利用して空中にピクセル(点)が描けそうなんだけど。

・補償光学
https://ja.wikipedia.org/wiki/補償光学

・レーザーガイド星
https://ja.wikipedia.org/wiki/レーザーガイド星

でも、そんな面倒なことするくらいならドローンにLEDの四角いランプをつけて飛ばして、それを打ち落とすゲームの方が安くできそう。

・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/