Welcome Dialog

コミュニティへようこそ。

まったく新しい外観になりました。ツアーに参加して、アドビサポートコミュニティの最新情報をご覧ください


グループレイヤーを画像書き出ししたい

New Here ,
Nov 23, 2018 Nov 23, 2018

リンクをクリップボードにコピー

コピー完了

グループレイヤー(以下グループ)が100ほどある状態で

それぞれのグループレイヤーを個別に画像書き出ししたいです。

書き出しのレイヤーからファイルを使えば単体のレイヤーならできるのですが

グループだとグループの中身を一枚ずつ出力してしまいできません

手動でグループを一つずつ結合するは手間とヒューマンエラー的に現実的でないです

実現したいこと

グループレイヤーの結合 (Ctrl+E)と レイヤーの移動 (Alt+])をグループレイヤーが存在する限り続ける処理を作る

できれば決まった回数ではなくグループレイヤーが存在する限りという方法がベター(エラーで中断でもいい)

わからないこと

作成したアクションを複数回実行する手段

もう一つ候補としてJavaScriptの知識が多少あるのでスクリプトを組んでしまうという方法なんですが

こちらは日本語リファレンスが見つからずに頓挫してます...

どなたか心当たりのあるかたお知恵を拝借支度存じます

よろしくお願いします。

表示

2.6K

いいね

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines

correct answers 1 件の正解

積極的な参加者 , Nov 23, 2018 Nov 23, 2018
幾つあるかわからないものに対してアクションで対応するのは難しいでしょう。JavaScript でやるなら、レイヤーセット(グループ)の数を調べて、その回数分ループしながら「グループを結合」することで「レイヤーグループ」→「レイヤー」が可能です。↓ 単純なスクリプトを書いてテストしました。var laylength = activeDocument.layerSets.length;for (var i = laylength - 1; i > -1; i--) {  activeDocument.layerSets.merge();}1行目でドキュメント内のレイヤーセット数を調べて「laylength」に代入しています。(注意:グループ内のサブグループはカウントされません)2行目からのループでレイヤーセットを1つずつ「merge()」で結合していきます。このループの特徴は、カウンター変数を1ずつ減らす(デクリメント)ようにしているところです。これは、レイヤーセットが結合されて通常のレイヤーになるとレイヤーセット数がどんどん減っていくので、一番下のレイヤーセットから上に向かって順に結合し...

いいね

翻訳

翻訳
Adobe Most Valuable Participants ,
Nov 23, 2018 Nov 23, 2018

リンクをクリップボードにコピー

コピー完了

スクリプトはよくわからないので力技になりますが、まず1回分のアクションを「アクション1」として「アクション2」では「アクション1」を10回実行する、「アクション3」では「アクション2」を10回実行する、「アクション4」では「アクション3」を2回実行する、これで200グループ分になりますが、うまくいきますかやってみなければわかりません。

アクションを記録するのは数分〜数10分でできる筈です。

-- silk-m

--
Susumu Iwasaki

いいね

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
New Here ,
Nov 24, 2018 Nov 24, 2018

リンクをクリップボードにコピー

コピー完了

最新

silk-mさん

アクションを複数回実行するアクションを乗算的に使うということですね

アクションを指定回数実行するという方法が無い以上スクリプトを使わない場合はこの方法が楽そうです

ありがとうございました!

いいね

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
積極的な参加者 ,
Nov 23, 2018 Nov 23, 2018

リンクをクリップボードにコピー

コピー完了

幾つあるかわからないものに対してアクションで対応するのは難しいでしょう。

JavaScript でやるなら、レイヤーセット(グループ)の数を調べて、その回数分ループしながら「グループを結合」することで

「レイヤーグループ」→「レイヤー」

が可能です。

↓ 単純なスクリプトを書いてテストしました。

var laylength = activeDocument.layerSets.length;

for (var i = laylength - 1; i > -1; i--) {

  activeDocument.layerSets.merge();

}

1行目でドキュメント内のレイヤーセット数を調べて「laylength」に代入しています。

(注意:グループ内のサブグループはカウントされません)

2行目からのループでレイヤーセットを1つずつ「merge()」で結合していきます。

このループの特徴は、カウンター変数を1ずつ減らす(デクリメント)ようにしているところです。

これは、レイヤーセットが結合されて通常のレイヤーになるとレイヤーセット数がどんどん減っていくので、一番下のレイヤーセットから上に向かって順に結合していくためです。

(変数 i のスタートを「laylength - 1」として、i が0になるまでデクリメントしながらループします)

通常のループ(インクリメント)でやる場合は、layerSets[0] (一番上)を結合した時点でそれまでlayerSets[1](2番目)だったレイヤーセットがlayerSets[0] (一番上)に繰り上がることを考慮する必要があります。

いいね

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
New Here ,
Nov 24, 2018 Nov 24, 2018

リンクをクリップボードにコピー

コピー完了

12kiriさん

activeDocument.layerSets.merge();

まさにこの部分がわからなかったので助かりました!

layerSetsの配列が結合するたびに更新されるのであれば

activeDocument.layerSets[0].merge();を繰り返すことで

配列の中身がなくなるまでだるま落とし式に処理できるのでは?

というアイデアと、個人的に回数が確定していないものは

forよりwhile派というのもありまして

do {

activeDocument.layerSets[0].merge();

} while(activeDocument.layerSets.length != 0)

という形で落ち着きました

あとは中身が空のレイヤーセットがあると結合できずにエラーが出てしまうので

そのあたりのエラー処理を実装してみます。

ありがとうございました!

いいね

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines