2012-11-09 1 views

답변

2

방법이 있습니다.

당신은 액션 매니저를 사용할 수 있습니다

var ref = new ActionReference(); 
ref.putEnumerated(charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt")); 
var desc = executeActionGet(ref).getObjectValue(stringIDToTypeID('layerEffects')).getObjectValue(stringIDToTypeID('dropShadow')); 
desc.getUnitDoubleValue(stringIDToTypeID('distance')) 

경우 "의 DropShadow는"읽고 예 "거리"를 반환되는 매개 변수가 할 layereffect입니다. 다른 layereffects 및 매개 변수는 이벤트 ID로만 알려져 있습니다. 다른 eventid가 필요한 경우 설명서를 참조하십시오 (문서가 잘못됨).

다음 AM 코드는 레이어 스타일 그림자가 있는지 확인합니다.

var res = false; 
var ref = new ActionReference(); 
ref.putEnumerated(charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt")); 
var hasFX = executeActionGet(ref).hasKey(stringIDToTypeID('layerEffects')); 
if (hasFX){ 
var ref = new ActionReference(); 
ref.putEnumerated(charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt")); 
res = executeActionGet(ref).getObjectValue(stringIDToTypeID('layerEffects')).hasKey(stringIDToTypeID('dropShadow')); 
    } 
return res; 

이렇게하면 http://forums.adobe.com/thread/714406이 더 많이 설명됩니다. 당신이 (또는 이상) 포토샵 CS6.1가있는 경우

당신이 알려주세요, 다른 PARAMS을 설정하지 않고, 그림자를 설정하는 방법을 찾을 경우

...

+0

도움을 주셔서 감사합니다. 이제 'DropShadow'값 이름 (예 :'거리 ')을 찾으려고합니다. P. 물론, 내가 너에게 알려줄거야. –

1

아마 당신이 찾고있는 대답은 아니지만 실제적으로 extendscript에서 레이어 스타일의 개별 속성에 액세스 할 수있는 방법은 없습니다. 레이어 스타일을 참조하는 API (CS6 기준)의 유일한 메소드는 ArtLayer.applyStyle(name)입니다. 이 기능을 사용하려면 실제로 Photoshop에서 스타일을 만들고 이름으로 팔레트에 저장해야합니다.

내가 생각할 수있는 유일한 점은 실제로 adobe/Adobe Photoshop/presets/styles/에있는 .asl 개의 파일을 C/C++을 사용하여 파싱하는 것입니다. 이 파일에는 독점 형식으로 저장된 여러 레이어 스타일이 포함되어 있습니다. 이 파일을 파싱 할 라이브러리를 찾지 못했지만 존재할 수 있습니다.

+0

감사합니다. 내가 찾은 정보를 확인했다 ... 슬픈 일이다. 나는 24 시간 동안 답을 기다릴 것이다. (희망은 아직 살아있다.) 그 보상을 보낼 것이다. –

0

, 당신의 구현을 확인할 수 있습니다 " 드롭 다운 섀도우 매개 변수에 액세스하는 방법을 보려면 클립 보드에 CSS 복사 "기능을 참조하십시오. 당신은 Mac의 Finder에서 찾는 경우 (

Adobe Photoshop CS6/Adobe Photoshop CS6.app/Contents/Required/CopyCSSToClipboard.jsx 

:

맥에
Adobe Photoshop CS6\Required\CopyCSSToClipboard.jsx 

, 소스 코드에 Windows 용

이 소스 코드는 , 포토샵 앱 아이콘을 Control- 클릭하고 "패키지 내용 표시"를 선택하여 Contents/Required 폴더로 이동해야합니다.

정보를 추출하는 방법의 예는 cssToClip.addDropShadow 루틴을 찾으십시오. 당신이 당신의 자신의 코드에 CopyCSSToClipboard.jsx에서 루틴을 사용하려면, 당신의 JSX 파일에 다음 코드를 추가합니다

runCopyCSSFromScript = true; 
if (typeof cssToClip == "undefined") 
    $.evalFile(app.path + "/" + localize("$$$/ScriptingSupport/Required=Required") + "/CopyCSSToClipboard.jsx"); 

또한, CopyCSSToClipboard.jsx의 하단에, cssToClip.dumpLayerAttr에 샘플 호출이 있습니다. 이 방법은 Photoshop DOM에서 액세스 할 수없는 스크립트에서 액세스하려는 매개 변수를 탐색하는 데 유용합니다.

필수 폴더의 코드는 향후 버전에서 변경 될 수 있습니다.

0

C# 및 포토샵 COM 래퍼를 사용하여 액션의 모든 데이터 트리를 덤프하는 ActionPrinter 메서드를 만들 수있었습니다.

PrintCurrentLayer 메서드는 모든 레이어 효과 데이터를 포함하여 레이어의 모든 데이터를 덤프합니다.

static void PrintCurrentLayer(Application ps) 
    { 
     var action = new ActionReference(); 
     action.PutEnumerated(ps.CharIDToTypeID("Lyr "), ps.CharIDToTypeID("Ordn"), ps.CharIDToTypeID("Trgt")); 
     var desc = ps.ExecuteActionGet(action);//.GetObjectValue(ps.StringIDToTypeID("layerEffects"));//.getObjectValue(ps.StringIDToTypeID('dropShadow')); 
     ActionPrinter(desc); 
    } 

    static void ActionPrinter(ActionDescriptor action) 
    { 
     for (int i = 0; i < action.Count; i++) 
     { 
      var key = action.GetKey(i); 

      if (action.HasKey(key)) 
      { 
       //var charId = action.Application.TypeIDToCharID((int)key); 
       //Debug.WriteLine(charId); 

       switch (action.GetType(key)) 
       { 
        case PsDescValueType.psIntegerType: 
         Debug.WriteLine("{0}: {1}", (PSConstants)key, action.GetInteger(key)); 
         break; 
        case PsDescValueType.psStringType: 
         Debug.WriteLine("{0}: \"{1}\"", (PSConstants)key, action.GetString(key)); 
         break; 
        case PsDescValueType.psBooleanType: 
         Debug.WriteLine("{0}: {1}", (PSConstants)key, action.GetBoolean(key)); 
         break; 
        case PsDescValueType.psDoubleType: 
         Debug.WriteLine("{0}: {1}", (PSConstants)key, action.GetDouble(key)); 
         break; 
        case PsDescValueType.psUnitDoubleType: 
         Debug.WriteLine("{0}: {1} {2}", (PSConstants)key, action.GetUnitDoubleValue(key), (PSConstants)action.GetUnitDoubleType(key)); 
         break; 
        case PsDescValueType.psEnumeratedType: 
         Debug.WriteLine("{0}: {1} {2}", (PSConstants)key, (PSConstants)action.GetEnumerationType(key), (PSConstants)action.GetEnumerationValue(key)); 
         break; 
        case PsDescValueType.psObjectType: 
         Debug.WriteLine($"{(PSConstants)key}: {(PSConstants)action.GetObjectType(key)} "); 
         Debug.Indent(); 
         ActionPrinter(action.GetObjectValue(key)); 
         Debug.Unindent(); 
         break; 
        case PsDescValueType.psListType: 
         var list = action.GetList(key); 
         Debug.WriteLine($"{(PSConstants)key}: List of {list.Count} Items"); 
         Debug.Indent(); 
         for (int count = 0; count < list.Count; count++) 
         { 
          var type = list.GetType(count); 
          Debug.WriteLine($"{count}: {type} "); 
          Debug.Indent(); 
          switch (type) 
          { 
           case PsDescValueType.psObjectType: 
            ActionPrinter(list.GetObjectValue(count)); 
            break; 
           case PsDescValueType.psReferenceType: 
            var reference = list.GetReference(count); 
            Debug.WriteLine(" Reference to a {0}", (PSConstants)reference.GetDesiredClass()); 
            break; 
           case PsDescValueType.psEnumeratedType: 
            Debug.WriteLine(" {0} {1}", (PSConstants)list.GetEnumerationType(count), (PSConstants)list.GetEnumerationValue(count)); 
            break; 
           default: 
            Debug.WriteLine($"UNHANDLED LIST TYPE {type}"); 
            break; 
          } 
          Debug.Unindent(); 
         } 
         Debug.Unindent(); 
         break; 
        default: 
         Debug.WriteLine($"{(PSConstants)key} UNHANDLED TYPE {action.GetType(key)}"); 
         break; 
       } 
      } 
     } 
    }