Photoshop スクリプトでレイヤーセット内のレイヤーを表示する方法について

このQ&Aのポイント
  • Photoshop のスクリプトを使用して全レイヤーとレイヤーセットを表示する方法について教えてください。
  • 現在、レイヤーセット内のレイヤーは表示されず、問題が発生しています。
  • どなたかレイヤーセット内のレイヤーも表示する方法についてご教示いただけないでしょうか。
回答を見る
  • ベストアンサー

Photoshop のスクリプト

http://questionbox.jp.msn.com/qa4996423.html こちらの質問を参考に、全レイヤーとレイヤーセットを表示する スクリプトを作成してみました。私はCSを使っています。 docObj = activeDocument; for (i=0; i<docObj.layers.length; i++) {  docObj.layers[i].visible = true; } for (i=0; i<docObj.layerSets.length; i++) {  docObj.layerSets[i].visible = true; } このスクリプトはちゃんと動くのですが 表示されるのは「レイヤー」と「レイヤーセット」のみで、 「レイヤーセットの中のレイヤー」は対象ではないらしく、表示されないものがあります。 どうにかレイヤーセット内のレイヤーも全て表示するように出来ないでしょうか? わかりにくい質問になりまして、申し訳ございません。 どなたかお知恵を貸していただけないでしょうか。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kawacchi
  • ベストアンサー率83% (26/31)
回答No.1

取得したオブジェクトの中にレイヤーセットを見つけたら、さらにその中にあるレイヤーを取得していくようにすれば、全てのレイヤーに対して処理を行うことができます。 オブジェクトがレイヤーセットかどうか調べ、該当した場合に再帰呼び出しを行う関数を使用すれば、お望みの動作になりますよ。 setVisible(activeDocument); function setVisible(obj) { var lays = obj.layers; for (var i = lays.length - 1; i >= 0; i--) { if (lays[i].typename == 'LayerSet') arguments.callee(lays[i]); lays[i].visible = true; } }

getutilitybox
質問者

お礼

jsファイルにして使ってみたところ、レイヤーセット内のレイヤーも、 レイヤーセット内レイヤーセットのレイヤーもばっちり表示されました! 言葉でどう伝えてよいかわからないほど感謝しています。 心からお礼を申し上げます。 本当に本当にありがとうございました!

関連するQ&A

  • photoshop 保存のjavaスクリプト

    photoshopのスクリプトで、下記のようなことができるでしょうか? Aというフォルダに1.jpg、2.jpgのふたつのjpgデータがあります。 これをphotoshopで開いて、Aフォルダ内にpsd形式で保存するというものです。 スクリプト後、Aフォルダの中に、1.jpg 2.jpg 1.psd 2.psd という 4つのデータが入ります。…というものです。 開いているjpgデータが4つあれば、4つ全てをpsdで保存したいです。 別のフォルダでなく、もとのデータが入っているフォルダに、 名前は、そのままの名前で(1.jpg→1.psd)保存したいです。 そのあと自動で閉じてくれたら最高です。 PSD形式で保存・・・や fileObj = new File("~/test.psd"); activeDocument.saveAs(fileObj, psdOpt, true, Extension.LOWERCASE); 全てのドキュメントを保存して閉じる・・・など while (documents.length > 0) { activeDocument.close(SaveOptions.SAVECHANGES); } 見てみましたが、うまく動かせません。 保存しますか、はい・いいえ、を毎回enterしないといけないのです。 どなたかご存知の方がいらっしゃいましたら、どうか教えてください。 もし、希望のスクリプトでなくても、その一部でも可能であれば 教えていただきたいです。 宜しくお願いいたします。

  • 【WIN-AI-CS2】スクリプト:保存時の警告

    イラレCS2で、スクリプトを利用してAI(EPS)ファイルをJPEGに変換します。 イラレ上に展開しているファイルではなく、フォルダ内にあるファイルを展開してJPEGに保存するスクリプトを組みました。 基本の動作は問題なく行われるのですが、1点だけ問題があります。 それは、JPEGで保存する際に 「保存されるファイルの中にラテン文字以外の~」 というダイアログがファイルごとに出て、処理が中断するのです。 出来れば、スクリプトを走らせたら、あとは放置で全ファイルを変換してしまいたいのです。 なお、ファイル名に関しては、WEBに使うものではないので日本語も入っています。 (作業仕様上、回避することは出来ません) 最悪、英名に変換して処理後に日本名に戻すようなBATファイルでも組めばいいのかもしれませんが、効率化の意味がなくなります。 JPEG保存時に、上記のダイアログを出ないようにして、あるいは強制的に「OK」の処理を行って、スクリプトの作業をとめない方法はありますでしょうか? よろしくおねがいします。 環境:WindowsXP SP2/Adobe Illustrator CS2 スクリプト: openFolder = Folder.selectDialog("SelectFolder with AI&EPS"); saveFolder = Folder.selectDialog("SelectFolder to save JPEG"); //AI fileList in "openFolder" fileListAi = openFolder.getFiles("*.ai"); //EPS fileList in "openFolder" fileListEps = openFolder.getFiles("*.eps"); //JPEG Set savingOptions jpegOpt = new ExportOptionsJPEG(); jpegOpt.qualitySetting = 100; //Proccess START if (fileListAi.length != 0){ for (i=0; i<fileListAi.length; i++){ fileObj = new File(fileListAi[i].fsName); open(fileObj); tmpFile = (fileListAi[i].name).split(".ai")[0]; saveJPEGFile = new File(saveFolder + "/" + tmpFile + ".jpg"); activeDocument.exportFile(saveJPEGFile, ExportType.JPEG, jpegOpt); activeDocument.close(SaveOptions.DONOTSAVECHANGES); } } if (fileListEps.length != 0){ for (i=0; i<fileListEps.length; i++){ fileObj = new File(fileListEps[i].fsName); open(fileObj); tmpFile = (fileListEps[i].name).split(".ai")[0]; saveJPEGFile = new File(saveFolder + "/" + tmpFile + ".jpg"); activeDocument.exportFile(saveJPEGFile, ExportType.JPEG, jpegOpt); activeDocument.close(SaveOptions.DONOTSAVECHANGES); } }

  • Illustratorの面積測定スクリプトが変な挙動をします

    いつもお世話になっております。 以下のようなスクリプトを書いて、 Illustratorの図形の面積を求めようと思っています。 レイヤごとに、中にあるパスアイテムの面積を総計したものを、 エクセルのシートに書き出すスクリプトです。 一応、動作はするのですが、以下の2点について、 よくわからない挙動をします。 1. 面積が約2倍になってでてくる。 テストで、10 mm × 10 mm の四角形を作り、 その面積を測ったのですが、約200になりました。 何故か、約2倍になってしまいます。 2. 多角形の面積がマイナスで出てくる。 面積を測りたい実際の図形が多角形です。 スクリプティング・ガイドは読んだのですが、 PathItem の Area の「四角形~」というのがよくわかりません。 上の、2点について、回答頂けますよう、 よろしくお願い致します。 Sub レイヤごとのパスアイテムの面積_作成中() Dim illApp As New Illustrator.Application Dim myDoc As Illustrator.Document Dim mm As Single, areaVal As Single Dim i As Integer Dim p As PathItem Dim l As Layer Set myDoc = illApp.ActiveDocument mm = 2.834645 i = 1 For Each l In myDoc.Layers areaVal = 0 If l.PathItems.Count <> 0 Then For Each p In l.PathItems areaVal = areaVal + p.Area Next p Range("A" & i).Value = l.Name Range("B" & i).Value = areaVal / mm / mm i = i + 1 End If Next l End Sub

  • スクリプトの入れ方で教えて下さい

    文字(例:あいうえお)にマウスを重ねると画像が表示されるスクリプトを以下のように書き込みました。 一箇所はこの通りで正常にできたのですが、同じページ内に数箇所同じスクリプトを有効にさせるためにはどうしたらよいのでしょうか? また、以下のスクリプトの場合で画像が表示される位置を指定したいのですが 可能でしょうか?(右側に表示・・・等) よろしくお願いいたします。 <script language="javascript"> <!-- function changeVis(obj, visible) { document.all(obj).style.visibility=(visible?"visible":"hidden") } //--> </script> <P align="center"><FONT size="2"> <A HREF="#" onMouseMove="changeVis('image', true)" onMouseOut="changeVis('image', false)">あいうえお</A> </F></P> <IMG SRC="画像.gif" STYLE='visibility:hidden' id='image'></DIV>

  • Photoshopのスクリプト(JavaScript)で、選択範囲の座標を抽出したい

    いつも質問にお答え頂きまして有難うございます。 業務で使用している Adobe Photoshop CS2(Windows版)で、 選択範囲の座標を取得するスクリプト(JavaScript)を 作ることになりました。 とりあえず選択範囲の左上のX座標を取得するために、 以下のステートメントを書きました。 alert(activeDocument.selection.bounds[0]); ところが、以下のようなエラーが出てしまいます。 Error 8800: Photoshop の一般エラーが発生しました。 -「取得」コマンドは現在使用できません。 Line: 10 -> alert(activeDocument.selection.bounds[0]); ちなみに bounds[0] を left や x に変えても結果は同じでした。 alert(activeDocument.selection.left); alert(activeDocument.selection.x); どうすれば正常に動くようになるでしょうか? ご教示頂けますと幸いです。

  • java詳しい方宜しくお願いします。

    <!--HPB_SCRIPT_CODE_40 function _HpbShowObj(lId) { var ob;ob=new Array; var appVer=parseInt(navigator.appVersion); var isNC=false,isN6=false,isIE=false; if (document.all && appVer >= 4) isIE=true; else if (document.getElementById && appVer > 4) isN6=true; else if (document.layers && appVer >= 4) isNC=true; if (isNC) { w_str = "document." + lId;ob[lId] = eval(w_str); if (!ob[lId]) ob[lId] = _HpbFindHiddenObj(document, lId); if (ob[lId]) ob[lId].visibility = "show"; } if (isN6) { ob[lId] = document.getElementById(lId); ob[lId].style.visibility = "visible"; } if (isIE) { w_str = "document.all.item(\"" + lId + "\").style";ob[lId] = eval(w_str); ob[lId].visibility = "visible"; } } function _HpbFindHiddenObj(doc, lId) { for (var i=0; i < doc.layers.length; i++) { var w_str = "doc.layers[i].document." + lId; var obj;obj=new Array; obj[lId] = eval(w_str); if (!obj[lId]) obj[lId] = _HpbFindHiddenObj(doc.layers[i], lId); if (obj[lId]) return obj[lId]; } return null; } //--> </script> これは何をするスクリプトでしょうか? ぜひご教授下さいませ。

    • ベストアンサー
    • Java
  • お詳しい方どうぞ宜しくお願い致します。

    <!--HPB_SCRIPT_CODE_40 function _HpbShowObj(lId) { var ob;ob=new Array; var appVer=parseInt(navigator.appVersion); var isNC=false,isN6=false,isIE=false; if (document.all && appVer >= 4) isIE=true; else if (document.getElementById && appVer > 4) isN6=true; else if (document.layers && appVer >= 4) isNC=true; if (isNC) { w_str = "document." + lId;ob[lId] = eval(w_str); if (!ob[lId]) ob[lId] = _HpbFindHiddenObj(document, lId); if (ob[lId]) ob[lId].visibility = "show"; } if (isN6) { ob[lId] = document.getElementById(lId); ob[lId].style.visibility = "visible"; } if (isIE) { w_str = "document.all.item(\"" + lId + "\").style";ob[lId] = eval(w_str); ob[lId].visibility = "visible"; } } function _HpbFindHiddenObj(doc, lId) { for (var i=0; i < doc.layers.length; i++) { var w_str = "doc.layers[i].document." + lId; var obj;obj=new Array; obj[lId] = eval(w_str); if (!obj[lId]) obj[lId] = _HpbFindHiddenObj(doc.layers[i], lId); if (obj[lId]) return obj[lId]; } return null; } //--> </script> これは何をするスクリプトでしょうか? これはテンプレートに記述されていたコードで 何のために必要か知りたかったので 一旦削除してサーバにアップしてみたのですが きちんと表示されていて問題なさそうでした。 すみませんがぜひご教授下さいませ。 宜しくお願い致します。

  • このスクリプトはどこが間違っているのでしょう

    IE7b3です。次のスクリプトの実行時に「";" がありません」というエラーがでるのですが、なぜでしょうか。配列の定義が間違っているようなのですが・・・。 window.onload = function(e) { var w = 0; tbs = document.getElementsByTagName("div"); for (i = 0; i < tbis.length; i ++) { if (tbs[i].className == "tb") { array tbis = new Array(tbs[i].getElementsByTagName("img")); for (j = 0; j < tbis.length; j ++) { if (tbis[j].className == "tbi") { w = tbis[j].getAttribute("width"); alert(w); } } } } };

  • HPB_SCRIPT_ROV_50

    はじめまして、お尋ね致します。 HPB_SCRIPT_ROV_50のjavascriptの記述が長過ぎるので、 外部ファイル化してROV.jsという名前で、indexファイルと同じ場所にで保存しました。 <head>~</head>内には、 <script type="text/javascript" src="ROV.js"></script>と記述しました。 ところがプレビューさせると、HPB_SCRIPT_ROV_50は宣言されていません。 というエラーが発生します。HPBのVer10.0.0.0にて作成。 言葉足らずで恐縮ですが、解決策をご教授下さい。 外部ファイル化したROV.jsの中身は下記の通りです。 HPB_SCRIPT_ROV_50 // // Licensed Materials - Property of IBM // 11P5743 // (C) Copyright IBM Corp. 1998, 2000 All Rights Reserved. // // HpbImgPreload: // function HpbImgPreload() { var appVer=parseInt(navigator.appVersion); var isNC=(document.layers && (appVer >= 4)); var isIE=(document.all && (appVer >= 4)); if (isNC || isIE) { if (document.images) { var imgName = HpbImgPreload.arguments[0]; var cnt; swImg[imgName] = new Array; for (cnt = 1; cnt < HpbImgPreload.arguments.length; cnt++) { swImg[imgName][HpbImgPreload.arguments[cnt]] = new Image(); swImg[imgName][HpbImgPreload.arguments[cnt]].src = HpbImgPreload.arguments[cnt]; } } } } // HpbImgFind: // function HpbImgFind(doc, imgName) { for (var i=0; i < doc.layers.length; i++) { var img = doc.layers[i].document.images[imgName]; if (!img) img = HpbImgFind(doc.layers[i], imgName); if (img) return img; } return null; } // HpbImgSwap: // function HpbImgSwap(imgName, imgSrc) { var appVer=parseInt(navigator.appVersion); var isNC=(document.layers && (appVer >= 4)); var isIE=(document.all && (appVer >= 4)); if (isNC || isIE) { if (document.images) { var img = document.images[imgName]; if (!img) img = HpbImgFind(document, imgName); if (img) img.src = imgSrc; } } } var swImg; swImg=new Array; 宜しくお願い致します。

  • java scriptで読み込むtxtでリンクする

    java scriptを使って外部テキストデータをhtml内に表示させることはできたのですが、そのテキストからさらに別ページへのリンクを貼る方法はあるでしょうか? ■java script内 var data = [ [2010.12.12,ここにコメント], [2010.11.11,'ここにコメント'], [2010.10.10,'ここにコメント'] ]; ※ここにコメントの全文または一部分をリンクさせたいです。 ■html内 <script type="text/javascript" src="data.js"></script> <script type="text/javascript"> for(var i=0;i<data.length;i++) document.write(data[i][0]+'&nbsp; &nbsp;'+data[i][1]+'<br>'); </script> よろしくお願いします。