Adobe Photoshop CS5에서 텍스트 문자열과 같은 CSS3로 변환하기 위해 ExtendScript를 사용하여 텍스트 또는 다른 레이어 섀도우 매개 변수를 가져 오는 방법이 있습니까?텍스트 레이어 그림자 매개 변수 가져 오기 (ExtendScript CS5, Photoshop 스크립팅)
감사합니다.
Adobe Photoshop CS5에서 텍스트 문자열과 같은 CSS3로 변환하기 위해 ExtendScript를 사용하여 텍스트 또는 다른 레이어 섀도우 매개 변수를 가져 오는 방법이 있습니까?텍스트 레이어 그림자 매개 변수 가져 오기 (ExtendScript CS5, Photoshop 스크립팅)
감사합니다.
방법이 있습니다.
당신은 액션 매니저를 사용할 수 있습니다
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을 설정하지 않고, 그림자를 설정하는 방법을 찾을 경우
...아마 당신이 찾고있는 대답은 아니지만 실제적으로 extendscript에서 레이어 스타일의 개별 속성에 액세스 할 수있는 방법은 없습니다. 레이어 스타일을 참조하는 API (CS6 기준)의 유일한 메소드는 ArtLayer.applyStyle(name)
입니다. 이 기능을 사용하려면 실제로 Photoshop에서 스타일을 만들고 이름으로 팔레트에 저장해야합니다.
내가 생각할 수있는 유일한 점은 실제로 adobe/Adobe Photoshop/presets/styles/
에있는 .asl
개의 파일을 C/C++을 사용하여 파싱하는 것입니다. 이 파일에는 독점 형식으로 저장된 여러 레이어 스타일이 포함되어 있습니다. 이 파일을 파싱 할 라이브러리를 찾지 못했지만 존재할 수 있습니다.
감사합니다. 내가 찾은 정보를 확인했다 ... 슬픈 일이다. 나는 24 시간 동안 답을 기다릴 것이다. (희망은 아직 살아있다.) 그 보상을 보낼 것이다. –
, 당신의 구현을 확인할 수 있습니다 " 드롭 다운 섀도우 매개 변수에 액세스하는 방법을 보려면 클립 보드에 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에서 액세스 할 수없는 스크립트에서 액세스하려는 매개 변수를 탐색하는 데 유용합니다.
필수 폴더의 코드는 향후 버전에서 변경 될 수 있습니다.
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;
}
}
}
}
도움을 주셔서 감사합니다. 이제 'DropShadow'값 이름 (예 :'거리 ')을 찾으려고합니다. P. 물론, 내가 너에게 알려줄거야. –