Access: 2038688
p-lux.net Ver.10.00 by Ryogo
透明シェイプレイヤを全解除するスクリプト
知り合いの絵描きさんの助言(通常レイヤ最強論)と
ペイントツールのブレンド演算周りの調査により、
最終加工以外は特殊なブレンドレイヤを極力使わないようにしていましたが、
ちょっと通常以外のレイヤを多用しなくちゃいけない用事ができたので、
前回の絵で(厳密には2つ前の非公開絵で)その制限を解除しました。
おかげでやりたいことがかなり簡単にできるようになりました。

さて、制限を解除するのはいいものの、それをすると
SaiからPhotoshopにもっていった時に透明シェイプレイヤをちまちま解除する
手間な作業が必要になります。

毎回毎回これを手動でやるのはあまりにもなので、
Photoshopの透明シェイプレイヤを全解除するスクリプトを
さくさくっと作ってみました。

var doc = app.activeDocument;
function main()
{
    var allArtLayers = new Array;
    var allVisibleInfo = new Array;
    getAllArtLayers(doc, allArtLayers, allVisibleInfo);
    
    for (var i=0; i < allArtLayers.length; i++)
    { 
        if(!allVisibleInfo[i])
            continue;
            
        doc.activeLayer = allArtLayers[i];
        var idsetd = charIDToTypeID( "setd" );
            var desc0 = new ActionDescriptor();
            var idnull = charIDToTypeID( "null" );
                var ref2 = new ActionReference();
                var idLyr = charIDToTypeID( "Lyr " );
                var idOrdn = charIDToTypeID( "Ordn" );
                var idTrgt = charIDToTypeID( "Trgt" );
                ref2.putEnumerated( idLyr, idOrdn, idTrgt );
            desc0.putReference( idnull, ref2 );
            var idT = charIDToTypeID( "T   " );
                var desc1 = new ActionDescriptor();
                var idtransparencyShapesLayer = stringIDToTypeID( "transparencyShapesLayer" );
                desc1.putBoolean( idtransparencyShapesLayer, false );
                var idLefx = charIDToTypeID( "Lefx" );
                    var desc2 = new ActionDescriptor();
                    var idScl = charIDToTypeID( "Scl " );
                    var idPrc = charIDToTypeID( "#Prc" );
                    desc2.putUnitDouble( idScl, idPrc, 100.000000 );
                var idLefx = charIDToTypeID( "Lefx" );
                desc1.putObject( idLefx, idLefx, desc2 );
            var idLyr = charIDToTypeID( "Lyr " );
            desc0.putObject( idT, idLyr, desc1 );
        executeAction( idsetd, desc0, DialogModes.NO );
    }
}
function getAllArtLayers(obj, layersArray, visibleArray) {
    for( var i = 0; i < obj.artLayers.length; i++) {
        layersArray.push(obj.artLayers[i]);
        visibleArray.push(obj.artLayers[i].visible);
    }
    for( var i = 0; i < obj.layerSets.length; i++) {
        getAllArtLayers(obj.layerSets[i], layersArray, visibleArray);
    }
}
main();

【注意点】

1.表示設定になっているレイヤが対象です。
(親のレイヤセットが非表示で表示されていない場合でも対象レイヤそのものが表示なら処理)

2.マスク+スタイルを使っている場合、透明シェイプレイヤを解除するとガッカリすることが多いです。

3.何があるかわかりません、スクリプト実行前に必ず保存してください。

4.レイヤ数が多いと処理に結構時間がかかります。

5.PhotoshopCS以上じゃないと多分動きません。

6.使う場合は、自己責任でお願いします。


もっと、SAIの色味をフォトショップで再現するには
不透明と塗りを反転するスクリプト
レポート

© 2003-2025 p-lux.net, Ryogo.

ページトップへ