リンクをクリップボードにコピー
コピー完了
PhotoShopの画像書き出しについてです。
添付画像のようにレイヤーが配置されている状態で、カンバスサイズを保持した状態で一括書き出しする方法はありませんか?拡張子は.pngで書き出したいです。
書き出したいレイヤーは各グループのトップ(A・B・C・D・E・F)です。
通常であれば、Aのグループのみ表示させ、それ以外のグループを非表示>名前を付けて保存>拡張子を選んで>保存となりますが(現在はこのやり方でやってます)、これだと1つのデータを保存するのに非常に時間がかかります。
しかもこの往復作業を計6回やらなくてはなりません。6個ならまだ何とかなりますが、これが何十個もあると途方に暮れます...。
上記手順で書き出したデータがこちら(グレーの部分は透明と仮定してください)↓
↑結論これを6個素早く作りたい
逆に、ファイル>書き出し>レイヤーからファイル だと、以下のように各レイヤーの解像度(余白がない状態)かつグループ化が解除された状態で書き出されてしまうので上記で説明した出来上がって欲しいものとは大きく差異があります。
A~F決められた場所に配置されたデータをそのままに描きだす方法があれば教えてください!
駄文で恐れ入りますがよろしくお願いいたします。
ふだん報酬ありきでスクリプト書いてますが、
今回ちょっとなのでこの場で書いてみました。
グループを内包しないグループを結合する、という内容です。
追加要件対応やメンテナンスについては期待なさらないでください。
mergeMinGroup(app.activeDocument);
function mergeMinGroup(gr){
var flag = true;
for(var i = gr.layers.length - 1; i >= 0; i--){
var ly = gr.layers[i];
if(ly.typename == "LayerSet"){
flag = false;
mergeMinGroup(ly);
}
}
if(flag) gr.merge();
}
もと
あと
というかんじです。ここまでこぎつけたら、あとは ファイルメニュー > 書き出し > レイヤーからファイル でいけるのでは。
リンクをクリップボードにコピー
コピー完了
いったん要件を整理していいでしょうか。
・背景レイヤーは本来存在しない(非表示などでもなく本当に存在しない)
・グループごとの書き出しをしたい
・グループが入れ子になっている場合、最奥のグループだけを対象としたい
・親グループ内に子グループ以外の単一レイヤーが存在する場合は無視する(例にはないが可能性として)
…で合っているでしょうか?
自分が知らないだけなのかもしれませんが、機能として存在しない場合、言い換えれば「ユーザーにとって都合の良いグループを書き出す」にあたります。
つまりはスクリプトで解決するしかない案件かなあと。
リンクをクリップボードにコピー
コピー完了
駄文の中大変恐れ入ります。。
いただいている要件定義で合っています。
自分でもいろいろと調べてみているとやはりスクリプトで解決が早いのかもしれないと感じました。とは言ってもコードは1mmも書けないので搭載されている機能でなんとかしようとしています。。
直近試した中で一番再現性良かったものはレイヤーカンプ機能でした。
しかしながらこちらも一度”不必要なレイヤーは非表示の上”、レイヤーカンプに追加を繰り返す必要がありました。書き出しに関してはカンプに追加したもの全選択>書き出し>レイヤーカンプからファイルで一括書き出しができたため当初記載の方法より若干効率は上がり、カンバスサイズを維持したまま書き出すことができました。
ですが求めているのは「不必要なレイヤーは非表示の上」という作業を除いて行いたくそれに付随する機能やスクリプトがあればご教示いただきたく....。
言ってしまえば、グループの親を右クリックしてこのレイヤー+背景(カンバス全体)のみを書き出す。みたいな機能が無いものなのかなと😰.....。
リンクをクリップボードにコピー
コピー完了
ふだん報酬ありきでスクリプト書いてますが、
今回ちょっとなのでこの場で書いてみました。
グループを内包しないグループを結合する、という内容です。
追加要件対応やメンテナンスについては期待なさらないでください。
mergeMinGroup(app.activeDocument);
function mergeMinGroup(gr){
var flag = true;
for(var i = gr.layers.length - 1; i >= 0; i--){
var ly = gr.layers[i];
if(ly.typename == "LayerSet"){
flag = false;
mergeMinGroup(ly);
}
}
if(flag) gr.merge();
}
もと
あと
というかんじです。ここまでこぎつけたら、あとは ファイルメニュー > 書き出し > レイヤーからファイル でいけるのでは。
リンクをクリップボードにコピー
コピー完了
わざわざコードまで書いてくださりありがとうございます!
ご教示いただいたコードを使用してスクリプト実行したら画像のようにすることができました。
適宜レイヤーの中身を変更する必要がある場合は事前にバックアップ(コピペ)やスマートオブジェクトにしておく必要はありますが、明らかに時短にはなりました。
今後活用させていただきます。ありがとうございました!
リンクをクリップボードにコピー
コピー完了
元のデータから6個複製を作成する。(ちょっと面倒)
それぞれ一つのレイヤー表示だけにする。(数多いと面倒)
インデザインとかに一気に配置して一気に書き出す。(わりと簡単)
書き出しが個別じゃない分、少し楽な気がします。
リンクをクリップボードにコピー
コピー完了
終わった話だけれどつぶやいておきます
「PNG書き出し」にショートカットを設定して
スクリプトを実行してショートカットをするともう少し楽になる
・・・気がする
リンクをクリップボードにコピー
コピー完了
Windows環境であればPhotoshopの純正機能で対応できます。
【準備1】
環境設定 > 書き出し > オプション
⇒従来の「書き出し形式」を使用にチェックを入れる
※Mac環境には何故かこの項目が存在しません
【準備2】
フォルダ「A」~「F」にレイヤーマスクを作成。
【ステップ1】
フォルダ「A」~「F」を選択
※その際に一番最上層にある「グループ」は選択しないこと
【ステップ2】
選択済みのいずれかのレイヤーを右クリック > PNGとしてクイック書き出し > 保存
以上で、選択された全てのフォルダ(及びレイヤー)がカンバスサイズを保持して書き出されます。
蛇足ですが…
準備2に関しては手作業になります。ただ、キーボードショートカットを駆使していただければそこまで手間ではないかと思います。念の為その方法についても記載しておきます。
■レイヤーマスク作成の時短方法 キーボードショートカット編
【準備1】
キーボードショートカットを設定(例: Ctrl + ^)
⇒アプリケーションメニュー > レイヤー > レイヤーマスク > すべての領域を表示
【準備2】
マスクを作成したいレイヤーのみを表示
【ステップ】
1. Alt + [ or Alt + ]
2. レイヤーマスクのショートカット(例: Ctrl + ^)
3. 1と2を繰り返し
リンクをクリップボードにコピー
コピー完了
Photoshop 25.9.1 Mac です
「従来の書き出し形式」チェック、Macにもありました!
リンクをクリップボードにコピー
コピー完了
Macにも項目があれば同じ方法で対応できそうですね。
私が確認した環境はM2だったのでシリーズによって違うのかもしれません。
情報ありがとうございます!
リンクをクリップボードにコピー
コピー完了
AppleSilicon版ではこのチェックは出ません。Rosettaで開いてintelバージョンにすると出てきます。
リンクをクリップボードにコピー
コピー完了
皆様追記ありがとうございます。
eight88様ご指摘の方法でも無事カンバスサイズを保持したまま書き出すことができました!
リンクをクリップボードにコピー
コピー完了
AK_pub3:アカウント間違えましたがスレ本人です😌
皆様ありがとうございます!