有没有什么办法让文本(或任何其他)层阴影在Adobe Photoshop CS5使用ExtendScript进一步皈依像文本字符串CSS3 PARAMS?获取文字层阴影参数(ExtendScript CS5,Photoshop的脚本)
谢谢!
有没有什么办法让文本(或任何其他)层阴影在Adobe Photoshop CS5使用ExtendScript进一步皈依像文本字符串CSS3 PARAMS?获取文字层阴影参数(ExtendScript CS5,Photoshop的脚本)
谢谢!
有一个办法。
您必须使用ActionManager:
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'))
其中“阴影效果”是你想读和例如“距离”是将要返回的参数layereffect。其他的层状效应和参数只被称为eventids。如果你需要其他的eventids,请查看文档(记录错误)。
下一个AM-代码会检查是否有layerstyle阴影。
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更多。
如果你找到一个方法来设置阴影,不设置其他参数,可以让我知道...
也许不是你要找的,但实在是没有办法从extendscript访问的图层样式的各个属性的答案。引用图层样式的API中的唯一方法(截至CS6)为ArtLayer.applyStyle(name)
。实际上,您必须在Photoshop中创建样式并按名称保存到调色板才能使用此样式。
我唯一能想到的就是用C/C++解析adobe/Adobe Photoshop/presets/styles/
中找到的.asl
文件。这些文件包含以专有格式保存的几种图层样式。我还没有找到任何库来解析这些文件,但它们可能存在。
谢谢。你确认了我发现的信息......这很让人伤心。 我会等待24小时以上的答案(希望仍然存在),然后我会发送奖励。 –
如果你的Photoshop CS6.1(或更高版本),你可以检查出的实施“将CSS复制到剪贴板“功能,查看如何访问投影参数。
在Windows中,此源代码是在
Adobe Photoshop CS6\Required\CopyCSSToClipboard.jsx
在Mac上,源代码是:
Adobe Photoshop CS6/Adobe Photoshop CS6.app/Contents/Required/CopyCSSToClipboard.jsx
(如果你正在寻找在Finder在Mac上,您需要按住Control键并点击Photoshop应用程序图标,然后选择“显示包装内容”以进入内容/必需文件夹)。
查找日常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访问。
事先警告中所需的文件夹的代码有可能在未来版本中的更改。
我能够制作一个ActionPrinter方法,该方法使用C#和photoshop COM包装器转储出一个操作中的所有数据树。
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''的数值名称(例如''distance'')... P.S.当然,我会让你知道的 –