jsx로 레이어 이름으로 저장

머리



500~1000개의 이미지 데이터 생성 작업을 자산이나 액션에서는 처리할 수 없는 내용 때문에 수작업을 생각했을 때・・・
「이대로는 끝나지 않아」!!(@_@;
라고 생각해 쓴 jsx로 배운 일의 메모입니다.

샘플 PSD에 관하여



동일한 배경에 레이어를 바꾸어 여러 종류의 이미지 데이터를 생성합니다.
오징어, psd의 내용입니다.


이 psd로부터 "Other_01~05"+ "_10~100000"이라는 명명 규칙으로 이하와 같은 이름으로 GIF 화상을 합계 40 파일 정도 생성한다.
  • Other_01 레이어의 GIF 이미지 유형
    "Other_01_100000.gif""Other_01_50000.gif""Other_01_10000.gif""Other_01_5000.gif""Other_01_1000.gif""Other_01_100.gif""Other_01_00.gif
  • Other_02 레이어의 GIF 이미지 유형
    "Other_02_100000.gif""Other_02_50000.gif""Other_02_10000.gif""Other_02_5000.gif""Other_02_1000.gif""Other_02_100.gif""Other_02_50.gif
  • Other_03 레이어의 GIF 이미지 유형
    "Other_03_100000.gif""Other_03_50000.gif""Other_03_10000.gif""Other_03_5000.gif""Other_03_1000.gif""Other_03_100.gif""Other_03_90.5

    생성하는 모든 이미지에 필요한 배경 레이어에는 "base"라고 붙였습니다.
    또한 숫자의 종류별로 예를 들면, "*_50.gif"의 각 화상에서는 "Other_01"~"Other_05"의 레이어분, "50"이라는 문자의 레이어와 "50_waku"의 테두리의 레이어가 붙는, "Other_01~ 05"의 레이어로 5 종류의 화상을 내보내는 동작을 생각합니다.

    이하, 완성 화상의 폴더내의 스쿠쇼.


    절차



    처리 내용 파악



    이 단계는 script를 쓰면서 생각하고 있는 처리의 순서를 구체적으로 이미지하기 때문에, 일상적인 경험이 도움이 됩니다.
  • PSD에서 필요한 레이어를 표시합니다
  • 적절한 압축 형식을 선택(옵션을 붙일 수 있다)
  • 명명 규칙이 있고 그에 따라 이미지 이름을 지정하여 저장

  • 필요한 처리 선택



    이번에는 이전 단계에서 올린 처리를 다음과 같이 생각했습니다.

    1 PSD에서 필요한 레이어 표시


  • for 문에서 모든 레이어 전망
  • if 문으로 표시의 유무를 끈다

  • 2 적절한 압축 형식 선택(옵션을 지정할 수 있음)


  • 지금까지의 압축 형식을 확인
  • (저장시 적절한 옵션 추가)

  • 3 명명 규칙이 있고 그에 따라 이미지 이름을 지정하여 저장


  • 명명 규칙에 따라 레이어에 이름을 붙인다
  • 생성된 이미지명을 레이어의 이름을 살려 명명 규칙에 맞춘다

  • 처리 내용을 떨어뜨리다



    실제로 설정한 (지금부터 하는) 함수등의 지정은 어쩌면, 구체적으로 스크립트에 떨어뜨립니다.

    【1step】필요한 카테고리분의 for문을 준비
     ↓
    【2step】 레이어 모두 보기 for 문을 준비
     ↓
    【3step】레이어의 수만큼 레이어의 내용을 보기 때문에, 한층 더 레이어의 수의 횟수 볼 수 있는 for문으로 둘러싼다
     ↓
    【4step】 보존의 타이밍은 1주위 레이어를 돌고 돌린 후에 실행

    JSX
    function getLayerObj(){ 
        //レイヤーの情報を整理する関数を準備
        var layers = activeDocument.layers;
        var layerCount = 0;
        var layerMax = layers.length;
            ・    
            ・    
            ・    
            ・    
        //保存形式の準備、減色などの調節
        var gifOpt = new GIFSaveOptions();
            gifOpt.colors = 64;
            gifOpt.dither = Dither.NONE;
            gifOpt.matte = MatteType.WHITE;
            ・    
            ・    
            ・    
    
    /*------------------------------------------------------------------------
    【1step】
    必要なカテゴリ分のfor文を用意
    ・保存する種類分の回数を回すfor文
    ・ここではサンプルpsdの 100000,50000,10000,5000,1000,100,50,10 を種類として、
     すべてのレイヤーを解析する回数を8回指定。
    ------------------------------------------------------------------------*/
        for (var m = 0 ; m < 8; m++){
            wakuLayer = sizeNum[m] + "_waku";
    /*------------------------------------------------------------------------
    【3step】
    レイヤーの数だけレイヤーの内容を見るので、
    さらにレイヤーの数の回数見る事が出来るfor文で囲う
    ------------------------------------------------------------------------*/
            for(var n = 0; n<layerMax; n++){
    /*------------------------------------------------------------------------
    【2step】
    レイヤー全てを見るfor文を用意
    ------------------------------------------------------------------------*/
                for(var i = 0; i<layerMax; i++){
                       //表示させるレイヤーをif文でふるい分け
                       if(i == n){
                           //レイヤーの名前取得
                           fName = layers[i].name;
                           //保存するパスの生成。ここで、ファイル名は命名規則にそぐうものを生成させるようにする。
                           fileGifObj = new File( path + fName + "_" + sizeNum[m] +".gif" );
                              //表示させるレイヤーを変数に格納
                              visibleLayer03 = activeDocument.layers[i];
                                ・
                                ・
                                ・
                                ・
                                ・
                                ・
                            }else{
                              //表示させないレイヤーにはそのまま非表示のBooleanを渡す
                              activeDocument.layers[i].visible = false;
                            }
                        }
                 //全部のレイヤーから保存しないレイヤーの場合はフラグを立てる 
                 if(fName == "base"){
                        noPrintLayerFlag = true;
                        }
                            for (var l = 0 ; l < 8; l++){
                                   ・
                                   ・
                                   ・
                                }
    /*------------------------------------------------------------------------
    【4step】
     保存のタイミングは1周りレイヤーを見て回った後に実行
    ・レイヤーの名前が保存対象外だったら保存しない。"base"とかです。
    ------------------------------------------------------------------------*/
                    if(!noPrintLayerFlag){
                        //レイヤーを表示Boolean。保存メゾットでデータ格納する
                        visibleLayer01.visible = true;
                        visibleLayer02.visible = true;
                        visibleLayer03.visible = true;
                        visibleLayer04.visible = true;
                        activeDocument.saveAs( fileGifObj, gifOpt, true, Extension.LOWERCASE);
                        }else{
                            //フラグを戻す
                            noPrintLayerFlag = false;
                        }
                    } 
                } 
                 alert("おわったよ!"); 
           }
          //スクリプトを実行 
          getLayerObj();
    

    실제 소스는 여기
    htps : // 기 st. Giteubuse r 콘텐트 t. 이 m / 토모카 / 아 c0 아 2 7db377043 아 f83 / 등 w / 69073871 dcdbf60cb714381 예 b04b6b6cdf96f8 / 게 t ぁ ぇ ろ bj. jsx

    후기



    jsx 덕분에 그렇게 고생하지 않고 내보낼 수있었습니다. 수가 많으면 대기 시간이 늘어나는 것이 넥입니다만, 확실히 화상을 생성해 주기 때문에 누설도 적어집니다. 붙이는 jsx가 편리하다고 생각했다.
    이 jsx는 범용성이 낮기 때문에, 다음 쓸 때는 그 때의 작업 뿐만이 아니라 범용성이 높은 jsx가 걸도록(듯이) 노력한다.

    좋은 웹페이지 즐겨찾기