photoshop

Photoshopのスクリプト制作に役に立つScriptingListenerJS.log最適化:追記2です。

・ログのパターンがループだった場合自動的にループに書き換えるようにしました!

 (18MB 30万行のテストログの変換時間がリスト変換無しで54秒に・・・

  最速が7秒で、前回が22秒だったので、かなりコストがかかってますね^^;

  リスト有りだと半分以下の時間になるので、まだなんとか・・・

  と言っても、今回の変換にかかる処理時間は0.06秒くらいです。)

・一部IDの統合(主にカラー部分)

 

ログ内容:

  RGBのドキュメント作成 >> CMYKモードに変更 >> トーンカーブ作成 >> トーンカーブ操作 >> トーンカーブ作成

ScriptingListenerJS.log

// =======================================================
var idMk = charIDToTypeID( "Mk  " );
    var desc23 = new ActionDescriptor();
    var idNw = charIDToTypeID( "Nw  " );
        var desc24 = new ActionDescriptor();
        var idMd = charIDToTypeID( "Md  " );
        var idRGBM = charIDToTypeID( "RGBM" );
        desc24.putClass( idMd, idRGBM );
        var idWdth = charIDToTypeID( "Wdth" );
        var idRlt = charIDToTypeID( "#Rlt" );
        desc24.putUnitDouble( idWdth, idRlt, 617.142857 );
        var idHght = charIDToTypeID( "Hght" );
        var idRlt = charIDToTypeID( "#Rlt" );
        desc24.putUnitDouble( idHght, idRlt, 617.142857 );
        var idRslt = charIDToTypeID( "Rslt" );
        var idRsl = charIDToTypeID( "#Rsl" );
        desc24.putUnitDouble( idRslt, idRsl, 350.000000 );
        var idpixelScaleFactor = stringIDToTypeID( "pixelScaleFactor" );
        desc24.putDouble( idpixelScaleFactor, 1.000000 );
        var idFl = charIDToTypeID( "Fl  " );
        var idFl = charIDToTypeID( "Fl  " );
        var idWht = charIDToTypeID( "Wht " );
        desc24.putEnumerated( idFl, idFl, idWht );
        var idDpth = charIDToTypeID( "Dpth" );
        desc24.putInteger( idDpth, 8 );
        var idprofile = stringIDToTypeID( "profile" );
        desc24.putString( idprofile, "sRGB IEC61966-2.1" );
    var idDcmn = charIDToTypeID( "Dcmn" );
    desc23.putObject( idNw, idDcmn, desc24 );
executeAction( idMk, desc23, DialogModes.NO );

// =======================================================
var idCnvM = charIDToTypeID( "CnvM" );
    var desc25 = new ActionDescriptor();
    var idT = charIDToTypeID( "T   " );
    var idCMYM = charIDToTypeID( "CMYM" );
    desc25.putClass( idT, idCMYM );
executeAction( idCnvM, desc25, DialogModes.NO );

// =======================================================
var idMk = charIDToTypeID( "Mk  " );
    var desc26 = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
        var ref6 = new ActionReference();
        var idAdjL = charIDToTypeID( "AdjL" );
        ref6.putClass( idAdjL );
    desc26.putReference( idnull, ref6 );
    var idUsng = charIDToTypeID( "Usng" );
        var desc27 = new ActionDescriptor();
        var idType = charIDToTypeID( "Type" );
            var desc28 = new ActionDescriptor();
            var idpresetKind = stringIDToTypeID( "presetKind" );
            var idpresetKindType = stringIDToTypeID( "presetKindType" );
            var idpresetKindDefault = stringIDToTypeID( "presetKindDefault" );
            desc28.putEnumerated( idpresetKind, idpresetKindType, idpresetKindDefault );
        var idCrvs = charIDToTypeID( "Crvs" );
        desc27.putObject( idType, idCrvs, desc28 );
    var idAdjL = charIDToTypeID( "AdjL" );
    desc26.putObject( idUsng, idAdjL, desc27 );
executeAction( idMk, desc26, DialogModes.NO );

// =======================================================
var idsetd = charIDToTypeID( "setd" );
    var desc29 = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
        var ref7 = new ActionReference();
        var idAdjL = charIDToTypeID( "AdjL" );
        var idOrdn = charIDToTypeID( "Ordn" );
        var idTrgt = charIDToTypeID( "Trgt" );
        ref7.putEnumerated( idAdjL, idOrdn, idTrgt );
    desc29.putReference( idnull, ref7 );
    var idT = charIDToTypeID( "T   " );
        var desc30 = new ActionDescriptor();
        var idpresetKind = stringIDToTypeID( "presetKind" );
        var idpresetKindType = stringIDToTypeID( "presetKindType" );
        var idpresetKindCustom = stringIDToTypeID( "presetKindCustom" );
        desc30.putEnumerated( idpresetKind, idpresetKindType, idpresetKindCustom );
        var idAdjs = charIDToTypeID( "Adjs" );
            var list5 = new ActionList();
                var desc31 = new ActionDescriptor();
                var idChnl = charIDToTypeID( "Chnl" );
                    var ref8 = new ActionReference();
                    var idChnl = charIDToTypeID( "Chnl" );
                    var idChnl = charIDToTypeID( "Chnl" );
                    var idCmps = charIDToTypeID( "Cmps" );
                    ref8.putEnumerated( idChnl, idChnl, idCmps );
                desc31.putReference( idChnl, ref8 );
                var idCrv = charIDToTypeID( "Crv " );
                    var list6 = new ActionList();
                        var desc32 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc32.putDouble( idHrzn, 37.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc32.putDouble( idVrtc, 0.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list6.putObject( idPnt, desc32 );
                        var desc33 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc33.putDouble( idHrzn, 124.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc33.putDouble( idVrtc, 182.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list6.putObject( idPnt, desc33 );
                        var desc34 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc34.putDouble( idHrzn, 255.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc34.putDouble( idVrtc, 255.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list6.putObject( idPnt, desc34 );
                desc31.putList( idCrv, list6 );
            var idCrvA = charIDToTypeID( "CrvA" );
            list5.putObject( idCrvA, desc31 );
                var desc35 = new ActionDescriptor();
                var idChnl = charIDToTypeID( "Chnl" );
                    var ref9 = new ActionReference();
                    var idChnl = charIDToTypeID( "Chnl" );
                    var idChnl = charIDToTypeID( "Chnl" );
                    var idCyn = charIDToTypeID( "Cyn " );
                    ref9.putEnumerated( idChnl, idChnl, idCyn );
                desc35.putReference( idChnl, ref9 );
                var idCrv = charIDToTypeID( "Crv " );
                    var list7 = new ActionList();
                        var desc36 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc36.putDouble( idHrzn, 0.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc36.putDouble( idVrtc, 0.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list7.putObject( idPnt, desc36 );
                        var desc37 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc37.putDouble( idHrzn, 115.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc37.putDouble( idVrtc, 159.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list7.putObject( idPnt, desc37 );
                        var desc38 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc38.putDouble( idHrzn, 186.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc38.putDouble( idVrtc, 108.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list7.putObject( idPnt, desc38 );
                        var desc39 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc39.putDouble( idHrzn, 255.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc39.putDouble( idVrtc, 255.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list7.putObject( idPnt, desc39 );
                desc35.putList( idCrv, list7 );
            var idCrvA = charIDToTypeID( "CrvA" );
            list5.putObject( idCrvA, desc35 );
                var desc40 = new ActionDescriptor();
                var idChnl = charIDToTypeID( "Chnl" );
                    var ref10 = new ActionReference();
                    var idChnl = charIDToTypeID( "Chnl" );
                    var idChnl = charIDToTypeID( "Chnl" );
                    var idMgnt = charIDToTypeID( "Mgnt" );
                    ref10.putEnumerated( idChnl, idChnl, idMgnt );
                desc40.putReference( idChnl, ref10 );
                var idCrv = charIDToTypeID( "Crv " );
                    var list8 = new ActionList();
                        var desc41 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc41.putDouble( idHrzn, 68.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc41.putDouble( idVrtc, 0.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list8.putObject( idPnt, desc41 );
                        var desc42 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc42.putDouble( idHrzn, 89.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc42.putDouble( idVrtc, 162.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list8.putObject( idPnt, desc42 );
                        var desc43 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc43.putDouble( idHrzn, 221.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc43.putDouble( idVrtc, 255.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list8.putObject( idPnt, desc43 );
                desc40.putList( idCrv, list8 );
            var idCrvA = charIDToTypeID( "CrvA" );
            list5.putObject( idCrvA, desc40 );
                var desc44 = new ActionDescriptor();
                var idChnl = charIDToTypeID( "Chnl" );
                    var ref11 = new ActionReference();
                    var idChnl = charIDToTypeID( "Chnl" );
                    var idChnl = charIDToTypeID( "Chnl" );
                    var idYllw = charIDToTypeID( "Yllw" );
                    ref11.putEnumerated( idChnl, idChnl, idYllw );
                desc44.putReference( idChnl, ref11 );
                var idCrv = charIDToTypeID( "Crv " );
                    var list9 = new ActionList();
                        var desc45 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc45.putDouble( idHrzn, 0.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc45.putDouble( idVrtc, 0.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list9.putObject( idPnt, desc45 );
                        var desc46 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc46.putDouble( idHrzn, 34.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc46.putDouble( idVrtc, 99.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list9.putObject( idPnt, desc46 );
                        var desc47 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc47.putDouble( idHrzn, 90.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc47.putDouble( idVrtc, 40.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list9.putObject( idPnt, desc47 );
                        var desc48 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc48.putDouble( idHrzn, 124.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc48.putDouble( idVrtc, 194.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list9.putObject( idPnt, desc48 );
                        var desc49 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc49.putDouble( idHrzn, 169.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc49.putDouble( idVrtc, 88.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list9.putObject( idPnt, desc49 );
                        var desc50 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc50.putDouble( idHrzn, 255.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc50.putDouble( idVrtc, 255.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list9.putObject( idPnt, desc50 );
                desc44.putList( idCrv, list9 );
            var idCrvA = charIDToTypeID( "CrvA" );
            list5.putObject( idCrvA, desc44 );
                var desc51 = new ActionDescriptor();
                var idChnl = charIDToTypeID( "Chnl" );
                    var ref12 = new ActionReference();
                    var idChnl = charIDToTypeID( "Chnl" );
                    var idChnl = charIDToTypeID( "Chnl" );
                    var idBlck = charIDToTypeID( "Blck" );
                    ref12.putEnumerated( idChnl, idChnl, idBlck );
                desc51.putReference( idChnl, ref12 );
                var idCrv = charIDToTypeID( "Crv " );
                    var list10 = new ActionList();
                        var desc52 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc52.putDouble( idHrzn, 41.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc52.putDouble( idVrtc, 0.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list10.putObject( idPnt, desc52 );
                        var desc53 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc53.putDouble( idHrzn, 58.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc53.putDouble( idVrtc, 183.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list10.putObject( idPnt, desc53 );
                        var desc54 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc54.putDouble( idHrzn, 157.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc54.putDouble( idVrtc, 151.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list10.putObject( idPnt, desc54 );
                        var desc55 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc55.putDouble( idHrzn, 189.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc55.putDouble( idVrtc, 233.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list10.putObject( idPnt, desc55 );
                        var desc56 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc56.putDouble( idHrzn, 202.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc56.putDouble( idVrtc, 255.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list10.putObject( idPnt, desc56 );
                desc51.putList( idCrv, list10 );
            var idCrvA = charIDToTypeID( "CrvA" );
            list5.putObject( idCrvA, desc51 );
        desc30.putList( idAdjs, list5 );
    var idCrvs = charIDToTypeID( "Crvs" );
    desc29.putObject( idT, idCrvs, desc30 );
executeAction( idsetd, desc29, DialogModes.NO );

// =======================================================
var idMk = charIDToTypeID( "Mk  " );
    var desc57 = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
        var ref13 = new ActionReference();
        var idAdjL = charIDToTypeID( "AdjL" );
        ref13.putClass( idAdjL );
    desc57.putReference( idnull, ref13 );
    var idUsng = charIDToTypeID( "Usng" );
        var desc58 = new ActionDescriptor();
        var idType = charIDToTypeID( "Type" );
            var desc59 = new ActionDescriptor();
            var idpresetKind = stringIDToTypeID( "presetKind" );
            var idpresetKindType = stringIDToTypeID( "presetKindType" );
            var idpresetKindDefault = stringIDToTypeID( "presetKindDefault" );
            desc59.putEnumerated( idpresetKind, idpresetKindType, idpresetKindDefault );
        var idCrvs = charIDToTypeID( "Crvs" );
        desc58.putObject( idType, idCrvs, desc59 );
    var idAdjL = charIDToTypeID( "AdjL" );
    desc57.putObject( idUsng, idAdjL, desc58 );
executeAction( idMk, desc57, DialogModes.NO );

 

以下がログを最適化した状態。

今回もリストで手書きした関数に置き換えは無しの自動生成コードです。

ScriptingLibraryJS.jsx

/* =============== Library : 4 ===============
Mk_Nw_Md_RGBM_Wdth_Rlt_Hght_Rslt_Rsl_pixelScaleFactor_Fl_Wht_Dpth_profile_Dcmn
CnvM_T_CMYM
Mk_null_AdjL_Usng_Type_presetKind_presetKindType_presetKindDefault_Crvs
setd_null_AdjL_Ordn_Trgt_T_presetKind_presetKindType_presetKindCustom_Adjs_Chnl_colorSet_Crv_Hrzn_Vrtc_Pnt_CrvA_Crvs
 ======================================== */
 
function Mk_Nw_Md_RGBM_Wdth_Rlt_Hght_Rslt_Rsl_pixelScaleFactor_Fl_Wht_Dpth_profile_Dcmn( T_A0,T_1,T_2,T_3,T_4 ) {
var idMk = charIDToTypeID( "Mk  " );
var idNw = charIDToTypeID( "Nw  " );
var idMd = charIDToTypeID( "Md  " );
var idRGBM = charIDToTypeID( "RGBM" );
var idWdth = charIDToTypeID( "Wdth" );
var idRlt = charIDToTypeID( "#Rlt" );
var idHght = charIDToTypeID( "Hght" );
var idRslt = charIDToTypeID( "Rslt" );
var idRsl = charIDToTypeID( "#Rsl" );
var idpixelScaleFactor = stringIDToTypeID( "pixelScaleFactor" );
var idFl = charIDToTypeID( "Fl  " );
var idWht = charIDToTypeID( "Wht " );
var idDpth = charIDToTypeID( "Dpth" );
var idprofile = stringIDToTypeID( "profile" );
var idDcmn = charIDToTypeID( "Dcmn" );
var desc0 = new ActionDescriptor();
var desc1 = new ActionDescriptor();
desc1.putClass( idMd, idRGBM );
desc1.putUnitDouble( idWdth, idRlt, T_A0[0] );
desc1.putUnitDouble( idHght, idRlt, T_A0[1] );
desc1.putUnitDouble( idRslt, idRsl, T_1 );
desc1.putDouble( idpixelScaleFactor, T_2 );
desc1.putEnumerated( idFl, idFl, idWht );
desc1.putInteger( idDpth, T_3 );
desc1.putString( idprofile, T_4 );
desc0.putObject( idNw, idDcmn, desc1 );
executeAction( idMk, desc0, DialogModes.NO );
}
function CnvM_T_CMYM(  ) {
var idCnvM = charIDToTypeID( "CnvM" );
var idT = charIDToTypeID( "T   " );
var idCMYM = charIDToTypeID( "CMYM" );
var desc0 = new ActionDescriptor();
desc0.putClass( idT, idCMYM );
executeAction( idCnvM, desc0, DialogModes.NO );
}
function Mk_null_AdjL_Usng_Type_presetKind_presetKindType_presetKindDefault_Crvs(  ) {
var idMk = charIDToTypeID( "Mk  " );
var idnull = charIDToTypeID( "null" );
var idAdjL = charIDToTypeID( "AdjL" );
var idUsng = charIDToTypeID( "Usng" );
var idType = charIDToTypeID( "Type" );
var idpresetKind = stringIDToTypeID( "presetKind" );
var idpresetKindType = stringIDToTypeID( "presetKindType" );
var idpresetKindDefault = stringIDToTypeID( "presetKindDefault" );
var idCrvs = charIDToTypeID( "Crvs" );
var desc0 = new ActionDescriptor();
var ref0 = new ActionReference();
ref0.putClass( idAdjL );
desc0.putReference( idnull, ref0 );
var desc1 = new ActionDescriptor();
var desc2 = new ActionDescriptor();
desc2.putEnumerated( idpresetKind, idpresetKindType, idpresetKindDefault );
desc1.putObject( idType, idCrvs, desc2 );
desc0.putObject( idUsng, idAdjL, desc1 );
executeAction( idMk, desc0, DialogModes.NO );
}
function setd_null_AdjL_Ordn_Trgt_T_presetKind_presetKindType_presetKindCustom_Adjs_Chnl_colorSet_Crv_Hrzn_Vrtc_Pnt_CrvA_Crvs( T_A0 ) {
var idsetd = charIDToTypeID( "setd" );
var idnull = charIDToTypeID( "null" );
var idAdjL = charIDToTypeID( "AdjL" );
var idOrdn = charIDToTypeID( "Ordn" );
var idTrgt = charIDToTypeID( "Trgt" );
var idT = charIDToTypeID( "T   " );
var idpresetKind = stringIDToTypeID( "presetKind" );
var idpresetKindType = stringIDToTypeID( "presetKindType" );
var idpresetKindCustom = stringIDToTypeID( "presetKindCustom" );
var idAdjs = charIDToTypeID( "Adjs" );
var idChnl = charIDToTypeID( "Chnl" );
var idCrv = charIDToTypeID( "Crv " );
var idHrzn = charIDToTypeID( "Hrzn" );
var idVrtc = charIDToTypeID( "Vrtc" );
var idPnt = charIDToTypeID( "Pnt " );
var idCrvA = charIDToTypeID( "CrvA" );
var idCrvs = charIDToTypeID( "Crvs" );
var idCmps = charIDToTypeID( "Cmps" );
var idRd = charIDToTypeID( "Rd  " );
var idGrn = charIDToTypeID( "Grn " );
var idBl = charIDToTypeID( "Bl  " );
var idRGB = charIDToTypeID( "RGB " );
var idCyn = charIDToTypeID( "Cyn " );
var idMgnt = charIDToTypeID( "Mgnt" );
var idYllw = charIDToTypeID( "Yllw" );
var idBlck = charIDToTypeID( "Blck" );
var idCMYK = charIDToTypeID( "CMYK" );
var idLght = charIDToTypeID( "Lght" );
var idA = charIDToTypeID( "A   " );
var idB = charIDToTypeID( "B   " );
var idLab = charIDToTypeID( "Lab " );
var idColor = { "cmps":idCmps,"cm":idCmps, "rd":idRd,"r":idRd,"red":idRd, "grn":idGrn,"g":idGrn,"green":idGrn, "bl":idBl,"b":idBl,"blue":idBl, "rgb":idRGB,
"cyn":idCyn,"c":idCyn,"cyan":idCyn, "mgnt":idMgnt,"m":idMgnt,"magenta":idMgnt, "yllw":idYllw,"y":idYllw,"yellow":idYllw, "blck":idBlck,"k":idBlck,"black":idBlck, "cmyk":idCMYK,
"lght":idLght,"l":idLght, "a":idA, "b":idB, "lab":idLab }
var desc0 = new ActionDescriptor();
var ref0 = new ActionReference();
ref0.putEnumerated( idAdjL, idOrdn, idTrgt );
desc0.putReference( idnull, ref0 );
var desc1 = new ActionDescriptor();
desc1.putEnumerated( idpresetKind, idpresetKindType, idpresetKindCustom );
var list0 = new ActionList();
for (var j=0; j<T_A0.length; j++) {
var desc2 = new ActionDescriptor();
var ref1 = new ActionReference();
ref1.putEnumerated( idChnl, idChnl, idColor[T_A0[j][0].toLowerCase()] );
desc2.putReference( idChnl, ref1 );
var list1 = new ActionList();
var desc = [];
for (var k=0; k<T_A0[j][1].length; k++) {
desc[k] = new ActionDescriptor();
desc[k].putDouble( idHrzn, T_A0[j][1][k][0] );
desc[k].putDouble( idVrtc, T_A0[j][1][k][1] );
list1.putObject( idPnt, desc[k] ); }
desc2.putList( idCrv, list1 );
list0.putObject( idCrvA, desc2 ); }
desc1.putList( idAdjs, list0 );
desc0.putObject( idT, idCrvs, desc1 );
executeAction( idsetd, desc0, DialogModes.NO );
}

 

ScriptingListenerJS.jsx

#include "ScriptingLibraryJS.jsx";
Mk_Nw_Md_RGBM_Wdth_Rlt_Hght_Rslt_Rsl_pixelScaleFactor_Fl_Wht_Dpth_profile_Dcmn(
[617.142857,617.142857],350,1,8,"sRGB IEC61966-2.1" );
CnvM_T_CMYM(
 );
Mk_null_AdjL_Usng_Type_presetKind_presetKindType_presetKindDefault_Crvs(
 );
setd_null_AdjL_Ordn_Trgt_T_presetKind_presetKindType_presetKindCustom_Adjs_Chnl_colorSet_Crv_Hrzn_Vrtc_Pnt_CrvA_Crvs(
[["Cmps",[[37,0],[124,182],[255,255]]],["Cyn",[[0,0],[115,159],[186,108],[255,255]]],["Mgnt",[[68,0],[89,162],[221,255]]],["Yllw",[[0,0],[34,99],[90,40],[124,194],[169,88],[255,255]]],["Blck",[[41,0],[58,183],[157,151],[189,233],[202,255]]]] );
Mk_null_AdjL_Usng_Type_presetKind_presetKindType_presetKindDefault_Crvs(
 );

 

動作確認については、3D、テキスト、パペットワープ辺りがまだの状態です。

統合については、変形のポジション、make,setなどの編集タイプ等を少しずつ対応しようと思います。

ループの自動化に比べれば統合化は簡単なので、一通りはやっておきたいと思います。

 

ScriptingListenerJS.log最適化スクリプトの配布については、もう少し検証を行ってからにしようと思っています。

バイナリ形式のjsxbinでの配布を考えていますので、CS4以降 or Adobe ExtendScript Toolkit での対応となります。

ScriptingListenerJS.logの正規化、最適化を全て自動的に行ってしまうというスクリプト。

強力な点は、将来実装される機能のログにも対応しています。

ログのパターンから自動的に生成し、コードのエラーはほぼ0で関数にします。

統合したい関数はリスト管理で追加可能で、関数名、引数もろもろも外部から変更可能。

今回はそのデバッグモードのリスト管理無しの自動にループ分作成したりしてるな~程度に。

 ・リストごとループ文にしてしまう

 ・類似機能の関数統合化

 は、実装していないので、今後対応させようと思います。

 

 

ScriptingListenerJS.log

=======================================================
var idsetd = charIDToTypeID( "setd" );
    var desc84 = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
        var ref37 = new ActionReference();
        var idAdjL = charIDToTypeID( "AdjL" );
        var idOrdn = charIDToTypeID( "Ordn" );
        var idTrgt = charIDToTypeID( "Trgt" );
        ref37.putEnumerated( idAdjL, idOrdn, idTrgt );
    desc84.putReference( idnull, ref37 );
    var idT = charIDToTypeID( "T   " );
        var desc85 = new ActionDescriptor();
        var idpresetKind = stringIDToTypeID( "presetKind" );
        var idpresetKindType = stringIDToTypeID( "presetKindType" );
        var idpresetKindCustom = stringIDToTypeID( "presetKindCustom" );
        desc85.putEnumerated( idpresetKind, idpresetKindType, idpresetKindCustom );
        var idAdjs = charIDToTypeID( "Adjs" );
            var list3 = new ActionList();
                var desc86 = new ActionDescriptor();
                var idChnl = charIDToTypeID( "Chnl" );
                    var ref38 = new ActionReference();
                    var idChnl = charIDToTypeID( "Chnl" );
                    var idChnl = charIDToTypeID( "Chnl" );
                    var idCmps = charIDToTypeID( "Cmps" );
                    ref38.putEnumerated( idChnl, idChnl, idCmps );
                desc86.putReference( idChnl, ref38 );
                var idCrv = charIDToTypeID( "Crv " );
                    var list4 = new ActionList();
                        var desc87 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc87.putDouble( idHrzn, 0.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc87.putDouble( idVrtc, 0.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list4.putObject( idPnt, desc87 );
                        var desc88 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc88.putDouble( idHrzn, 153.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc88.putDouble( idVrtc, 69.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list4.putObject( idPnt, desc88 );
                        var desc89 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc89.putDouble( idHrzn, 161.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc89.putDouble( idVrtc, 178.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list4.putObject( idPnt, desc89 );
                        var desc90 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc90.putDouble( idHrzn, 193.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc90.putDouble( idVrtc, 174.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list4.putObject( idPnt, desc90 );
                        var desc91 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc91.putDouble( idHrzn, 255.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc91.putDouble( idVrtc, 255.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list4.putObject( idPnt, desc91 );
                desc86.putList( idCrv, list4 );
            var idCrvA = charIDToTypeID( "CrvA" );
            list3.putObject( idCrvA, desc86 );
                var desc92 = new ActionDescriptor();
                var idChnl = charIDToTypeID( "Chnl" );
                    var ref39 = new ActionReference();
                    var idChnl = charIDToTypeID( "Chnl" );
                    var idChnl = charIDToTypeID( "Chnl" );
                    var idRd = charIDToTypeID( "Rd  " );
                    ref39.putEnumerated( idChnl, idChnl, idRd );
                desc92.putReference( idChnl, ref39 );
                var idCrv = charIDToTypeID( "Crv " );
                    var list5 = new ActionList();
                        var desc93 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc93.putDouble( idHrzn, 0.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc93.putDouble( idVrtc, 0.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list5.putObject( idPnt, desc93 );
                        var desc94 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc94.putDouble( idHrzn, 93.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc94.putDouble( idVrtc, 149.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list5.putObject( idPnt, desc94 );
                        var desc95 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc95.putDouble( idHrzn, 132.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc95.putDouble( idVrtc, 82.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list5.putObject( idPnt, desc95 );
                        var desc96 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc96.putDouble( idHrzn, 255.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc96.putDouble( idVrtc, 255.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list5.putObject( idPnt, desc96 );
                desc92.putList( idCrv, list5 );
            var idCrvA = charIDToTypeID( "CrvA" );
            list3.putObject( idCrvA, desc92 );
                var desc97 = new ActionDescriptor();
                var idChnl = charIDToTypeID( "Chnl" );
                    var ref40 = new ActionReference();
                    var idChnl = charIDToTypeID( "Chnl" );
                    var idChnl = charIDToTypeID( "Chnl" );
                    var idGrn = charIDToTypeID( "Grn " );
                    ref40.putEnumerated( idChnl, idChnl, idGrn );
                desc97.putReference( idChnl, ref40 );
                var idCrv = charIDToTypeID( "Crv " );
                    var list6 = new ActionList();
                        var desc98 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc98.putDouble( idHrzn, 0.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc98.putDouble( idVrtc, 0.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list6.putObject( idPnt, desc98 );
                        var desc99 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc99.putDouble( idHrzn, 212.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc99.putDouble( idVrtc, 162.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list6.putObject( idPnt, desc99 );
                        var desc100 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc100.putDouble( idHrzn, 255.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc100.putDouble( idVrtc, 255.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list6.putObject( idPnt, desc100 );
                desc97.putList( idCrv, list6 );
            var idCrvA = charIDToTypeID( "CrvA" );
            list3.putObject( idCrvA, desc97 );
                var desc101 = new ActionDescriptor();
                var idChnl = charIDToTypeID( "Chnl" );
                    var ref41 = new ActionReference();
                    var idChnl = charIDToTypeID( "Chnl" );
                    var idChnl = charIDToTypeID( "Chnl" );
                    var idBl = charIDToTypeID( "Bl  " );
                    ref41.putEnumerated( idChnl, idChnl, idBl );
                desc101.putReference( idChnl, ref41 );
                var idCrv = charIDToTypeID( "Crv " );
                    var list7 = new ActionList();
                        var desc102 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc102.putDouble( idHrzn, 0.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc102.putDouble( idVrtc, 0.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list7.putObject( idPnt, desc102 );
                        var desc103 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc103.putDouble( idHrzn, 143.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc103.putDouble( idVrtc, 179.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list7.putObject( idPnt, desc103 );
                        var desc104 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc104.putDouble( idHrzn, 184.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc104.putDouble( idVrtc, 127.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list7.putObject( idPnt, desc104 );
                        var desc105 = new ActionDescriptor();
                        var idHrzn = charIDToTypeID( "Hrzn" );
                        desc105.putDouble( idHrzn, 255.000000 );
                        var idVrtc = charIDToTypeID( "Vrtc" );
                        desc105.putDouble( idVrtc, 255.000000 );
                    var idPnt = charIDToTypeID( "Pnt " );
                    list7.putObject( idPnt, desc105 );
                desc101.putList( idCrv, list7 );
            var idCrvA = charIDToTypeID( "CrvA" );
            list3.putObject( idCrvA, desc101 );
        desc85.putList( idAdjs, list3 );
    var idCrvs = charIDToTypeID( "Crvs" );
    desc84.putObject( idT, idCrvs, desc85 );
executeAction( idsetd, desc84, DialogModes.NO );
 
// =======================================================
var idMk = charIDToTypeID( "Mk  " );
    var desc106 = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
        var ref42 = new ActionReference();
        var idAdjL = charIDToTypeID( "AdjL" );
        ref42.putClass( idAdjL );
    desc106.putReference( idnull, ref42 );
    var idUsng = charIDToTypeID( "Usng" );
        var desc107 = new ActionDescriptor();
        var idType = charIDToTypeID( "Type" );
            var desc108 = new ActionDescriptor();
            var idpresetKind = stringIDToTypeID( "presetKind" );
            var idpresetKindType = stringIDToTypeID( "presetKindType" );
            var idpresetKindDefault = stringIDToTypeID( "presetKindDefault" );
            desc108.putEnumerated( idpresetKind, idpresetKindType, idpresetKindDefault );
        var idCrvs = charIDToTypeID( "Crvs" );
        desc107.putObject( idType, idCrvs, desc108 );
    var idAdjL = charIDToTypeID( "AdjL" );
    desc106.putObject( idUsng, idAdjL, desc107 );
executeAction( idMk, desc106, DialogModes.NO );

上記のような形式でScriptingListenerJS.logは書き出されるわけですけど、

 

変換された状態は、

ScriptingLibraryJS.jsx

/* =============== Library : 2 ===============
setd_null_AdjL_Ordn_Trgt_T_presetKind_presetKindType_presetKindCustom_Adjs_Chnl_Cmps_Crv_Hrzn_Vrtc_Pnt_CrvA_Rd_Grn_Bl_Crvs
Mk_null_AdjL_Usng_Type_presetKind_presetKindType_presetKindDefault_Crvs
 ======================================== */
 
function setd_null_AdjL_Ordn_Trgt_T_presetKind_presetKindType_presetKindCustom_Adjs_Chnl_Cmps_Crv_Hrzn_Vrtc_Pnt_CrvA_Rd_Grn_Bl_Crvs( T_A0 ) {
var idsetd = charIDToTypeID( "setd" );
var idnull = charIDToTypeID( "null" );
var idAdjL = charIDToTypeID( "AdjL" );
var idOrdn = charIDToTypeID( "Ordn" );
var idTrgt = charIDToTypeID( "Trgt" );
var idT = charIDToTypeID( "T   " );
var idpresetKind = stringIDToTypeID( "presetKind" );
var idpresetKindType = stringIDToTypeID( "presetKindType" );
var idpresetKindCustom = stringIDToTypeID( "presetKindCustom" );
var idAdjs = charIDToTypeID( "Adjs" );
var idChnl = charIDToTypeID( "Chnl" );
var idCmps = charIDToTypeID( "Cmps" );
var idCrv = charIDToTypeID( "Crv " );
var idHrzn = charIDToTypeID( "Hrzn" );
var idVrtc = charIDToTypeID( "Vrtc" );
var idPnt = charIDToTypeID( "Pnt " );
var idCrvA = charIDToTypeID( "CrvA" );
var idRd = charIDToTypeID( "Rd  " );
var idGrn = charIDToTypeID( "Grn " );
var idBl = charIDToTypeID( "Bl  " );
var idCrvs = charIDToTypeID( "Crvs" );
var desc0 = new ActionDescriptor();
var ref0 = new ActionReference();
ref0.putEnumerated( idAdjL, idOrdn, idTrgt );
desc0.putReference( idnull, ref0 );
var desc1 = new ActionDescriptor();
desc1.putEnumerated( idpresetKind, idpresetKindType, idpresetKindCustom );
var list0 = new ActionList();
var desc2 = new ActionDescriptor();
var ref1 = new ActionReference();
ref1.putEnumerated( idChnl, idChnl, idCmps );
desc2.putReference( idChnl, ref1 );
var list1 = new ActionList();
var desc = [];
for (var k=0; k<T_A0[0].length; k++) {
desc[k] = new ActionDescriptor();
desc[k].putDouble( idHrzn, T_A0[0][k][0] );
desc[k].putDouble( idVrtc, T_A0[0][k][1] );
list1.putObject( idPnt, desc[k] ); }
desc2.putList( idCrv, list1 );
list0.putObject( idCrvA, desc2 );
var desc3 = new ActionDescriptor();
var ref2 = new ActionReference();
ref2.putEnumerated( idChnl, idChnl, idRd );
desc3.putReference( idChnl, ref2 );
var list2 = new ActionList();
var desc = [];
for (var k=0; k<T_A0[1].length; k++) {
desc[k] = new ActionDescriptor();
desc[k].putDouble( idHrzn, T_A0[1][k][0] );
desc[k].putDouble( idVrtc, T_A0[1][k][1] );
list2.putObject( idPnt, desc[k] ); }
desc3.putList( idCrv, list2 );
list0.putObject( idCrvA, desc3 );
var desc4 = new ActionDescriptor();
var ref3 = new ActionReference();
ref3.putEnumerated( idChnl, idChnl, idGrn );
desc4.putReference( idChnl, ref3 );
var list3 = new ActionList();
var desc = [];
for (var k=0; k<T_A0[2].length; k++) {
desc[k] = new ActionDescriptor();
desc[k].putDouble( idHrzn, T_A0[2][k][0] );
desc[k].putDouble( idVrtc, T_A0[2][k][1] );
list3.putObject( idPnt, desc[k] ); }
desc4.putList( idCrv, list3 );
list0.putObject( idCrvA, desc4 );
var desc5 = new ActionDescriptor();
var ref4 = new ActionReference();
ref4.putEnumerated( idChnl, idChnl, idBl );
desc5.putReference( idChnl, ref4 );
var list4 = new ActionList();
var desc = [];
for (var k=0; k<T_A0[3].length; k++) {
desc[k] = new ActionDescriptor();
desc[k].putDouble( idHrzn, T_A0[3][k][0] );
desc[k].putDouble( idVrtc, T_A0[3][k][1] );
list4.putObject( idPnt, desc[k] ); }
desc5.putList( idCrv, list4 );
list0.putObject( idCrvA, desc5 );
desc1.putList( idAdjs, list0 );
desc0.putObject( idT, idCrvs, desc1 );
executeAction( idsetd, desc0, DialogModes.NO );
}
function Mk_null_AdjL_Usng_Type_presetKind_presetKindType_presetKindDefault_Crvs(  ) {
var idMk = charIDToTypeID( "Mk  " );
var idnull = charIDToTypeID( "null" );
var idAdjL = charIDToTypeID( "AdjL" );
var idUsng = charIDToTypeID( "Usng" );
var idType = charIDToTypeID( "Type" );
var idpresetKind = stringIDToTypeID( "presetKind" );
var idpresetKindType = stringIDToTypeID( "presetKindType" );
var idpresetKindDefault = stringIDToTypeID( "presetKindDefault" );
var idCrvs = charIDToTypeID( "Crvs" );
var desc0 = new ActionDescriptor();
var ref0 = new ActionReference();
ref0.putClass( idAdjL );
desc0.putReference( idnull, ref0 );
var desc1 = new ActionDescriptor();
var desc2 = new ActionDescriptor();
desc2.putEnumerated( idpresetKind, idpresetKindType, idpresetKindDefault );
desc1.putObject( idType, idCrvs, desc2 );
desc0.putObject( idUsng, idAdjL, desc1 );
executeAction( idMk, desc0, DialogModes.NO );
}

 

ScriptingListenerJS.jsx

#include "ScriptingLibraryJS.jsx";
setd_null_AdjL_Ordn_Trgt_T_presetKind_presetKindType_presetKindCustom_Adjs_Chnl_Cmps_Crv_Hrzn_Vrtc_Pnt_CrvA_Rd_Grn_Bl_Crvs(
[[[0,0],[153,69],[161,178],[193,174],[255,255]],[[0,0],[93,149],[132,82],[255,255]],[[0,0],[212,162],[255,255]],[[0,0],[143,179],[184,127],[255,255]]] );
Mk_null_AdjL_Usng_Type_presetKind_presetKindType_presetKindDefault_Crvs(
 );

 

といった感じで、開発の手助けになるのでは?と。

(ちなみにトーンカーブ制御、トーンカーブ生成を変換したものです)

実行可能なのか、ほぼ全ての機能で試してみましたが、怪しいのが3D関連。

エラーは出ないのですが、結果が違うという・・・

ほぼ全て+今後追加されるであろう機能にも対応しているはずなので、もう少し作りこんで配布しようと考えています。

 

関数名の置き換え、リストによる最適化にも対応しているので、その辺りも柔軟にしていきたいものです。

(なんだかんだで、初期バージョンから使い始めて1年ちょっとバージョンが5.5と最も使っているすくりぷとだったりするんです)

 

ScriptingListenerJS.logのバグで、ダブルクォーテーションなどを含むと正常動作しなかったり、

海外フォーラムで報告されているPixel Benderのインストールディレクトリのアドレスの¥が足りずエラーが出たり

というのは独自の正規化で対応させています。

Photoshop CS5 12.0.4 64bit

photoshopbenchmark05_cs5.jpg

 

Photoshop用ベンチマークで総合的なものがなかったので

ver0.5程度の試作品ですが作ってみました。

 

対象はPhotoshop CS4以降です。

download >> PhotoshopBenchmarkScript.zip

使い方は、PhotoshopBenchmarkScript.zip 内に

PhotoshopBenchmark.abr

PhotoshopBenchmarkScript.jsxbin

がありますので、

1、PhotoshopBenchmark.abr のブラシデータをダブルクリックで、インストール。

2、PhotoshopBenchmarkScript.jsxbin をPhotoshopのウィンドウorメニューにドラッグすると開始されます。

 "No PhotoshopBenchmark.abr" と出た場合は、上記のブラシが読み込まれていないのでインストールしてください。

 

対応: Photoshop CS4,CS5

仮想記憶ディスクの使用量: 10~15GB

想定所要時間: 60~600秒。

 

テキストデータでデスクトップ上に以下のようなファイル名で書き出します。

@PhotoshopBenchmarkScript_xxxxxxxxxxxxx.txt

 

テキストの内容:

8.954 sec ( Shape )
0.369 sec ( Canvas rotation )
1.184 sec ( Integrated image )
1.056 sec ( Layer Copy x15 )
4.119 sec ( 2500 >> 5000pix )
10.524 sec ( ColorMode )
1.34 sec ( Uniting x15 )
12.907 sec ( Shape Drawing )
1.436 sec ( Path x30 )
37.38 sec ( Drawing )
0.549 sec ( 5000 >> 10000pix )
3.416 sec ( ColorMode 2 )
0.054 sec ( Layer Copy 10000pix )
1.654 sec ( 10000 >> 2500pix )
0.15 sec ( Path combine )
0.05 sec ( Path Delete )
1.118 sec ( PosterEdges )
1.484 sec ( Cutout )
0.758 sec ( SmudgeStick )
2.935 sec ( Sponge )
1.745 sec ( DryBrush )
0.63 sec ( NeonGlow )
1.947 sec ( PaletteKnife )
1.435 sec ( Fresco )
0.864 sec ( PlasticWrap )
3.31 sec ( ColoredPencil )
2.512 sec ( Watercolor )
0.9 sec ( RoughPastels )
2.357 sec ( Underpainting )
1.288 sec ( PaintDaubs )
0.577 sec ( FilmGrains )
36.903 sec ( Filter Set1 )
19.055 sec ( Filter Set2 )
165.305 sec

 

使用PCのスペック:

- OS: Windows 7 Professional 64bit
- CPU: Core i7 980X EE (OC: 4.40GHz 12ht TB:off
   +TRue Black 120 Plus,
    GentleTyphoon D1225C12B5AP-15 *2
- MB: GA-EX58-EXTREME Rev.1.0
- VGA: GTX260 VRAM1792MB +GT240 1024MB
   stock:GTX285
- MEM: F3-12800CL9T-12GBRL 4GB*6
   (1596MHz 9-9-9-24 24GB
- Pow: Xseries SS-850KM
- SSD: 128GB*2
  HDD:
  RamStorage: ANS-9010 *2,KRSD-9010/D8 60GB
   +MegaRAID SAS 9260-4i
- Case: Z-MACHINE GT1000 Black
- Display: FlexScan SX2462W, L997
- UPS: Backup CR 1200 CP1200SW JP
Cintiq 21UX DTK-2100/K0
Intuos4 Large PTK-840/K0

 

おまけで、ほぼ同設定のPhotoshop CS4 11.0.2 64bit

photoshopbenchmark05_cs4.jpg

 

5.122 sec ( Shape )
0.231 sec ( Canvas rotation )
1.195 sec ( Integrated image )
0.501 sec ( Layer Copy x15 )
4.117 sec ( 2500 >> 5000pix )
10.579 sec ( ColorMode )
1.105 sec ( Uniting x15 )
4.73 sec ( Shape Drawing )
0.502 sec ( Path x30 )
34.485 sec ( Drawing )
0.508 sec ( 5000 >> 10000pix )
3.405 sec ( ColorMode 2 )
0.032 sec ( Layer Copy 10000pix )
1.538 sec ( 10000 >> 2500pix )
0.132 sec ( Path combine )
0.019 sec ( Path Delete )
0.947 sec ( PosterEdges )
1.345 sec ( Cutout )
0.588 sec ( SmudgeStick )
2.745 sec ( Sponge )
1.588 sec ( DryBrush )
0.567 sec ( NeonGlow )
2.011 sec ( PaletteKnife )
1.522 sec ( Fresco )
0.912 sec ( PlasticWrap )
3.376 sec ( ColoredPencil )
2.557 sec ( Watercolor )
0.868 sec ( RoughPastels )
2.034 sec ( Underpainting )
1.119 sec ( PaintDaubs )
0.425 sec ( FilmGrains )
34.661 sec ( Filter Set1 )
17.098 sec ( Filter Set2 )
142.67 sec

実はパフォーマンスだけならCS4の方が早い??? な結果に・・・

変だな・・・こんなはずでは・・・

制限がなくなったり、機能追加されたり、精度が上がった??のが原因かもしれません。

設定ミスであると思いたいです。

 

安定性は格段にCS5が勝っているので、何か制限が入っているのかもしれませんね。

 

追記:各種表示するようにしました。

 

photoshopbenchmark051.jpg

20110814.jpg

販促的に30分くらいでラフ描いてみました!!

(このタイミングはありえないだろ・・・

 「サイトちゃんと更新してください」とか、突っ込まれたのもふ(ry ) 

 

 

 http://utane.sakura.ne.jp/doujin/c80.htm

ともう一つにゲスト参加させてもらってます。

c80g01.jpg

 うん。

なんか絵柄違いますね。はい。

 

 

de,いつもの本題。

Photoshop用に開発しているフィルターの一つです。

絵描きさんなら、やってしまうであろうミスの、

・べた塗りレイヤーとクリッピングレイヤーの統合

・レイヤーの選択ミスによる塗り間違え

その統合or混ぜてしまっているレイヤーを分離させるフィルターを作成しました。

al01.jpg

震天動地

 

2011_su_shi.jpgのサムネール画像

 

今回もなんだかんだ...で、描かせてもらっています。
お昼頃にお邪魔しているかもしれないので、そのときは宜しくです。

 

今回は縦12000pixのサイズで描いています。
レイヤーは基本的には1枚で、顔や部分的に数枚使うだけだったので、メモリに若干余裕はありましたし
何より仮想記憶ディスクが15GBくらいですみましたー。
最大キャパティシは50GBなので、スマートオブジェクトで花畑を作ったことがあったのですけど、
そのときよりはだいぶ軽かったです。
仮想記憶ディスクどこに使うのか?というと、主にカンバスの左右反対。
今回のようなサイズでも1~2秒程度で反転できますし、
6000pix前後で100~300レイヤーであろうと4~10秒で反転し終わります。
逆に案外PhotoshopではCPUを使えないなーという印象。自分の環境では使っても15%くらいです。
かといって、足りているのか?というと、プラグ印使用時に全然足りず90~100%の使用率で数分待たされたり、
3Dレンダリングではまったく足りていないという・・・(今回は使っていませんが)
 
 
PCのスペックも若干変わっ・・・
- OS: Windows 7 Professional 64bit
- CPU: Core i7 980X EE (OC: 4.40GHz 12ht TB:off
   +TRue Black 120 Plus,
    GentleTyphoon D1225C12B5AP-15 *2
- MB: GA-EX58-EXTREME Rev.1.0
- VGA: GTX260 VRAM1792MB +GT240 1024MB
   stock:GTX285
- MEM: F3-12800CL9T-12GBRL 4GB*6
   (1596MHz 9-9-9-24 24GB
- Pow: Xseries SS-850KM
- SSD: 128GB*2
  HDD:
  RamStorage: ANS-9010 *2,KRSD-9010/D8 60GB
   +MegaRAID SAS 9260-4i
- Case: Z-MACHINE GT1000 Black
- Display: FlexScan SX2462W, L997
- UPS: Backup CR 1200 CP1200SW JP
Cintiq 21UX DTK-2100/K0
Intuos4 Large PTK-840/K0
 
 
半年くらい更新をしていなかったのですが、一年位前から
PhotoshopのScriptingListenerJS.logを最適化しメソッドにするスクリプトを作成したりしてました。
 
・Logのオリジナル
// =======================================================
var idDplc = charIDToTypeID( "Dplc" );
    var desc195 = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
        var ref179 = new ActionReference();
        var idLyr = charIDToTypeID( "Lyr " );
        var idOrdn = charIDToTypeID( "Ordn" );
        var idTrgt = charIDToTypeID( "Trgt" );
        ref179.putEnumerated( idLyr, idOrdn, idTrgt );
    desc195.putReference( idnull, ref179 );
    var idVrsn = charIDToTypeID( "Vrsn" );
    desc195.putInteger( idVrsn, 5 );
executeAction( idDplc, desc195, DialogModes.NO );
// =======================================================
var idPbPl = charIDToTypeID( "PbPl" );
    var desc196 = new ActionDescriptor();
    var idKnNm = charIDToTypeID( "KnNm" );
    desc196.putString( idKnNm, "RGBtoHSV" );
    var idGpuY = charIDToTypeID( "GpuY" );
    desc196.putBoolean( idGpuY, true );
    var idLIWy = charIDToTypeID( "LIWy" );
    desc196.putBoolean( idLIWy, true );
    var idFPth = charIDToTypeID( "FPth" );
    desc196.putString( idFPth, "C:\Program Files\Adobe\Adobe Photoshop CS5 (64 Bit)\Pixel Bender Files\RGBtoHSV.pbk" );
executeAction( idPbPl, desc196, DialogModes.NO );
// =======================================================
var idPbPl = charIDToTypeID( "PbPl" );
    var desc197 = new ActionDescriptor();
    var idKnNm = charIDToTypeID( "KnNm" );
    desc197.putString( idKnNm, "HSVtoRGB" );
    var idGpuY = charIDToTypeID( "GpuY" );
    desc197.putBoolean( idGpuY, true );
    var idLIWy = charIDToTypeID( "LIWy" );
    desc197.putBoolean( idLIWy, true );
    var idFPth = charIDToTypeID( "FPth" );
    desc197.putString( idFPth, "C:\Program Files\Adobe\Adobe Photoshop CS5 (64 Bit)\Pixel Bender Files\HSVtoRGB.pbk" );
executeAction( idPbPl, desc197, DialogModes.NO );
 
・最適化した状態
function CopyLayer(  T_0 ) {
var idDplc = charIDToTypeID( "Dplc" );
var idnull = charIDToTypeID( "null" );
var idLyr = charIDToTypeID( "Lyr " );
var idOrdn = charIDToTypeID( "Ordn" );
var idTrgt = charIDToTypeID( "Trgt" );
var idVrsn = charIDToTypeID( "Vrsn" );
var desc0 = new ActionDescriptor();
var ref0 = new ActionReference();
ref0.putEnumerated( idLyr, idOrdn, idTrgt );
desc0.putReference( idnull, ref0 );
desc0.putInteger( idVrsn, T_0 );
executeAction( idDplc, desc0, DialogModes.NO );
}
function PbPl_KnNm_GpuY_LIWy_FPth(  T_0, T_1, T_2, T_3 ) {
var idPbPl = charIDToTypeID( "PbPl" );
var idKnNm = charIDToTypeID( "KnNm" );
var idGpuY = charIDToTypeID( "GpuY" );
var idLIWy = charIDToTypeID( "LIWy" );
var idFPth = charIDToTypeID( "FPth" );
var desc0 = new ActionDescriptor();
desc0.putString( idKnNm, T_0 );
desc0.putBoolean( idGpuY, T_1 );
desc0.putBoolean( idLIWy, T_2 );
desc0.putString( idFPth, T_3 );
executeAction( idPbPl, desc0, DialogModes.NO );
}
 
CopyLayer( 5 );
PbPl_KnNm_GpuY_LIWy_FPth( "RGBtoHSV",true,true,"C:\\Program Files\\Adobe\\Adobe Photoshop CS5 (64 Bit)\\Pixel Bender Files\\RGBtoHSV.pbk" );
PbPl_KnNm_GpuY_LIWy_FPth( "HSVtoRGB",true,true,"C:\\Program Files\\Adobe\\Adobe Photoshop CS5 (64 Bit)\\Pixel Bender Files\\HSVtoRGB.pbk" );
 
 
オリジナルのlogが著しく扱いづらいものだというのは触ったことのある方ならよくわかると思いますが、
本当にどうしてこうなった!!という出来です。
本当にありがとうございました。
 
まぁそんなのを処理を自動化するためにも自動的に最適化してしまおう なモノです。
(実行速度は1.0MBのlogデータ辺り処理時間は0.4~0.7秒と、JavaScriptでも頑張ればいけるものです)
 
そんなJavaScriptもピクセル操作は無理すぎたので、
Adobe Pixel Bender Toolkit を使い独自のフィルター開発を行っています。

コミックマーケット77

はちみつれもん様にてCDジャケットを描かせて頂いてます!

Over the Magic

Over the Magic

 コミックマーケット77 12/30(水)東ネ47b「はちみつれもん」にて先行配布!

今回も、ロゴとか諸々させてもらっています。

(白黒で簡単に色を落とす程度にしたほうが良かったのでは・・・?

 と思いつつも、いつも通り多彩色にしてしまいました^^;)

 

今回作業環境が向上していて、30000*30000pix程度までは動いてくれそうになりました。

Photoshopの仮想メモリに割り当てられるストレージの転送速度は300~500MB程度が限界速度なのですけど、

限界程度の速度が出るストレージではPhotoshopCS4 64bit版よりも32bit版動作の方が大抵の環境ではデータの読み込み、カンバスの反転処理が早いです!

えぇぇぇ・・・Σ(

64bit環境で作業する目安は12.0GB以上のRAMを搭載しているか、そうでないか・・・みたいです。

18.0GB近く割り当てると32bit版の3.0GBよりは3倍近くの処理速度になるのですけど、

逆に10.0GBを割ると同程度になり、6GB程度で50%程度になり負けてしまうという・・・

 

全ての処理時間を計測したわけではないので、あくまでもデータの読み込みとカンバスの反転時間の場合です。

仮想メモリのストレージがANS-9010を2台使用し、4本のSATAをRAID0で同時書き込みをおこなっているのでかなり早いわけですけど・・・

かと言って、SoftRamでは若干不安定というか、余計な処理が入り引っかかりが生じますので、

ANS-9010を2台、DDR2 2GBを16枚の約12万で高速なストレージを用意するのが一番パフォーマンスが良いかもしれないです。

 

 ◆=-作業環境-=◆
◇PC◇
- OS: Windows 7 Professional 64bit
- CPU: Core i7 975 EE (OC: 4.26GHz 8ht TB:off
   +TRue Black 120 Plus, MAGMA UCMA12 *2
- MB: GA-EX58-EXTREME Rev.1.0
- VGA: NE3TX285FT305 (GTX285 OC: 725MHz
- MEM: DDR3-1333 4GB*6 (1307MHz 7-7-7-18 24GB
- Pow: M12D SS-750EM
- SSD: 80GB,32GB
  HDD: 4.0TB
  RamStorage: ANS-9010,KRSD-9010/D8 32GB
- Case: Z-MACHINE GT1000 Black
- Display: FlexScan SX2462W, L997
◇ソフトウェア◇
  Photoshop CS4 Extended 11.0.1
  IllustStudio 1.1.0
  SAI 1.1.0

 

『モノクロ壁紙』

ill-010.jpg

 

『巫女壁紙』

ill-011.jpg

 

よろしければ、バナーも!

Over the Magic

前回のPhotoshop CS4 に必要なVRAMは?の内容が
最新ドライバー(GeForce Driver 190.62)ではないと参考にならないのでデータを取り直しました。

環境設定 - パフォーマンス

photoshop_cs4_vram-2.jpg

OS:Windows XP Professional 32bit sp3
   (3GBスイッチで拡張) CPU:C2Q Q9650 (OC:3.6GHz)
VGA:NE3TX285FT305 (GTX 285 OC:12% 725MHz)
   (Driver version: 190.62)
MEM:16GB
Photoshop CS4 Ex 11.0.1

RivaTuner v2.24C

photoshop_cs4_vram-3.jpg

 VRAM使用量 | 前回と比較 | 作業内容

  1.79MB, +0.28: Photoshop起動前
① 6.89MB, -1.32: 起動のみ
② 75.71MB, -10.64: 50000*50000pix グレースケール8bit作成
③ 202.33MB, +2.66: 0.417~3200%の全表示+回転使用時
④ 279.77MB, -18.08: RGB各8bitに変換
⑤ 366.71MB, -159.71: ④同様に表示の全キャッシュを蓄積
⑥ 275.33MB, -161.84: 最適化終了時


変更点
・最新のGeForce Driverでは、VRAMの使用量を常時最適化するようになりました。
・カンバスを回転してもVRAMの使用量が増えなくなりました。
 (拡大縮小表示時にVRAMの使用量が増えます。)

・ブラシ使用の遅延がほぼ起きません。
 (が、⑥の時に硬めの300pixのブラシツールで対角線上に直線を描いたときに
  描画が終了するまで3秒ほどかかります。
  未だに画像サイズが大きい場合の処理の重さは改善しきれたとは言い難いものです。)

 

ドライバーの完成度によって、だいぶ変わってしまいました。

"画像サイズの大きなデータではVRAMが足らなくなる"なんてことは起きない感じの仕様です。
レイヤー数が300を超え、1000を超える場合にはVRAMが足らなくなりそうです。
自分はあまりしませんが、大量の画像を表示するとか。
今回はAdobeのガイドラインに沿って、割り当てのメモリを落としましたが、
実際にはあまり使いませんし、メモリを削ったほうがパフォーマンスが落ちた感じがします。
(使ってない分意味無いでよね)
因みに、仮想メモリはGavotte Ramdiskを使用しています。
今回のテストでは収まりきって、低速なSSDに書き込むことはありませんでしたがギリギリでした。

Windows XP 32bitで検証するのも無理があるので・・・
Windows 7発売時、
 Windows 7 64bit
 CPU:i7 975 4.2~4.5GHz 8ht
 VGA: NE3TX285FT305 (GTX 285 OC:12% 725MHz)
 MEM: 24GB
  の環境で、どの程度のパフォーマンスが出るのかテストしたいと思います。

もし、何かしらの処理時間を知りたい方がいましたら、
コメントを頂ければできる範囲でテストしますのでお気軽に声をかけてください。

規格外のVRAM搭載は、無意味?

3月8日の例大祭にて、
ジャケットイラストで参加させてもらっています。

場所:
 東京ビッグサイト
 GoldenCityFactory様(こ47a)にて委託予定。

東方紅桜蒼月:
 はちみつれもん

ジャケットイラスト。

doj-002.jpg 


ポスター。

ill-007.jpg


ポスターにつきましては・・・
半日かけて書き直し+塗り直したものです。
CDのジャケットもこんな感じにしたかったのです。
ですが、レーザープリントは恐ろしいのでべたっと。


SenraGaro

gallery dojin rough profile link photoshop

Banner

banner banner

 直リン推奨です。


◆ ご依頼について ◆

◇お仕事募集しております。

 メールにてお問い合わせください。

 »mail : info@senragaro.com


◇携帯からもアクセスできます。

er

このサイトの画像,動画,文章の全ての無断転用を禁止します。

推奨環境: 1024*768pix以上

Sleipnir2 /2.9.2 Firefox3 /3.0.7 Safari3.2.1 /525.27.1 Internet Explorer8 /6.0~8.0 Lunascape5 /5.0.2 Opera /9.64 Google Chrome
Powered by Movable Type 5.0