毎日モザイク

White Room Layout Works

2019-05-15T23:56:03+09:00 [Wed]

Indesignから文字なし・文字ありのPNGで書き出して、レイヤー状態のPSDファイルでください。

Indesignからフォルダ1に文字非表示のPNG画像を書き出します。
ついで、フォルダ2に文字のみのPNG画像を書き出します。
これを適当な手段で合成して1枚のPSD形式にまとめて納品します。
そういう需要が少しあるようです。

// marge2ImagesIntoPsd.jsx
// Actionに"paste"セットを作って"pasteInto"アクションに
// "特殊ペースト→同じ位置にペースト"を記録
// Indesignで表示・非表示を分けて書き出したファイルを
// 一枚のレイヤー生きPSDファイルに結合する
// 2019.05.14 WhiteRoom
(function main () { var fs = folderSelect(); var re = /.*\.(JPG|jpg|PSD|psd|PNG|png|TIF|tif)$/; var layLitems = fs.layerL.getFiles(re); var layUitems = fs.layerU.getFiles(re); if ((layLitems.length) != (layUitems.length)) { confirm("画像ファイルと文字ファイルの数が異なっています。実行しますか?"); } //photoshop start for (var i = 0; i < layLitems.length; i++) { var fileObjL = new File(layLitems[i]); var fileObjU = new File(layUitems[i]); var saveLocation = new File(fs.savLoc + "/" + fileObjU.name); var psdOpt = new PhotoshopSaveOptions(); psdOpt.alphaChannels = true; psdOpt.annotations = true; psdOpt.embedColorProfile = false; psdOpt.layers = true; psdOpt.spotColors = false; open(fileObjL); open(fileObjU); activeDocument.selection.selectAll(); activeDocument.activeLayer.copy(); activeDocument.close(SaveOptions.DONOTSAVECHANGES); activeDocument.flatten(); //下段のレイヤーは統合します(個人的な都合) doAction("pasteInto","paste"); //同じ位置にペーストは面倒なのでaction activeDocument.saveAs(saveLocation, psdOpt, true, Extension.LOWERCASE); activeDocument.close(SaveOptions.DONOTSAVECHANGES); }
})();
//なんとなく分離してみただけ。この程度はmain()の中に入れたほうがいいかも
function folderSelect() { var retItems = new Object(); retItems.layerL = Folder.selectDialog("画像レイヤーのフォルダを選択してください"); retItems.layerU = Folder.selectDialog("文字レイヤーのフォルダを選択してください"); retItems.savLoc = Folder.selectDialog("保存先フォルダを選択してください"); return retItems;
}

まず定番の.DS_Storeほかファイラのクソファイル避け。
ブラックリスト方式は難しすぎるので(/^[^.].=$/ でも /(?!.).+$/ でも駄目だったので諦め)ホワイトリスト方式で。
次も定番の同じ位置にペーストがJSではできない。
できるっぽいけどかなりめんどくさそうなので、アクションに逃げます。
メニュー項目から同じ位置にペーストを記録したアクションを呼び出すだけでお悩み解決。
※同じinddから同じ設定で書き出した画像を扱うのが前提なので、サイズの不一致とか一切考慮に入れていません。