How can we get the font names of each text layer in a document?
hi all!
i wanted know how can names of fonts applied in each text layer in psd file. tried following,
int32 numlayers = 0;
// calculate number of text layers.
error = piugetinfo(classtextlayer, keycount, &numlayers, null);
for (int = numlayers - 1; > 0; --i)
{
char* fontname = new char[100];
int32 len = 100;
// font name of each layer index.
error = piugetinfobyindex(i, classtextlayer, keyfontname, fontname, &len);
}
suppose have document has 2 text layers , 2 solid color layers shown in screen shot. note document not have background layer. so, number of layers 4.
if layer selection @ 1 of solid color layers, number of layers 0. but, if layer selection @ of text layers, number of layers 4. why don't number of layers 2 requested info of text layers in statement, piugetinfo(classtextlayer, keycount, &numlayers, null).
also, error = -25922 @ piugetinfobyindex(i, classtextlayer, keyfontname, fontname, &len),
which errreferencenotfounddefine.
how can go this?
thanks!
hi,
i usualy "remember" stati in image , start work on it. allowes me iterate trough layers when pulling info or performing action , set document (in previous state, changes user wantsof course). using aproach acessing layers using index sure layer working on curently active layer.
now
getting layer numbers in document:
sperr amautoplugin::getlaynum()
{
sperr error = kspnoerror;
int32 numlayers;
piactiondescriptor result = null;
piactionreference reference = null;
error = spsactionreference->make(&reference);
if (error)goto returnerror;
error = spsactionreference->putenumerated(reference,classdocument,typeordinal,enumtarget);
if (error) goto returnerror;
error = spsactioncontrol->get(&result, reference);
if (error) goto returnerror;
error = spsactiondescriptor->getinteger(result, keynumberoflayers,&numlayers);
if (error) goto returnerror;
stdocdata.inumlayers=numlayers;// global
returnerror:
if (result != null)spsactiondescriptor->free(result);
if (reference != null) spsactionreference->free(reference);
return error;
}
here part of code (i hope manage understand since have cut out lots of
code not needed in order shorten post) fetch font names.
i used aproach since have more detailed info text layers (not prsented here)
i suppose bu using aproprite piugetinfobyindex routines can make shorter.
sperr amautoplugin::gettextlayerattributes(int index, txtlayerinfo* info)
{
// clarify
// "info" structure fill data need can use somethong suites you
//
uint32 stringlength=0;
uint32 strl=0;
char fontname[255]="";
char fontstyle[255]="";
char fontpsname[255]="";
boolean haskey =false;
sperr error = kspnoerror;
descriptortypeid runtimekeyid;
descriptortypeid runtimeclassid;
descriptortypeid runtimetypeid;
descriptortypeid runtimeunitid;
descriptortypeid runtimeenumid;
descriptorclassid descclass;
descriptorenumid enumvalue;
piactionlist listtextstyle=null;
piactiondescriptor desclayer = null;//*
piactiondescriptor descposition = null;
piactiondescriptor desctextlayer = null;
piactiondescriptor desctextstyle = null;
piactiondescriptor descfont = null;
piactiondescriptor descfontcolor= null;
piactiondescriptor descclickpoint=null;
piactiondescriptor desclayerlocking = null;
piactiondescriptor desceffects = null;
error = spsactiondescriptor->make(&desclayer);
if (error) goto returnerror;
error = spsactiondescriptor->make(&desctextlayer);
if (error) goto returnerror;
error = spsactiondescriptor->make(&desctextstyle);
if (error) goto returnerror;
error = spsactionlist->make(&listtextstyle);
if (error) goto returnerror;
error = spsactiondescriptor->make(&descfont);
if (error) goto returnerror;
error = piugetinfobyindex(index,classlayer,0,&desclayer,null);
if (error) goto returnerror;
//text
error = piugetsingleitemfromdescriptor(desclayer,keytext,&desctextlayer,&descclass);
if (error) goto returnerror;
//
//get font descriptor
error = spsactiondescriptor->getlist(desctextlayer, keytextstylerange, &listtextstyle);
if (error) goto returnerror;
error = spsactionlist->getobject(listtextstyle, 0,&descclass, &desctextstyle);
if (error) goto returnerror;
error = piugetsingleitemfromdescriptor(desctextstyle,keytextstyle,&descfont,&descclass);
if (error) goto returnerror;
//font size
error = spsactiondescriptor->getfloat(descfont, keysizekey, &dfontsize);
if (error) goto returnerror;
info->dfontsize=dfontsize;
//font name
error = spsactiondescriptor->getstringlength(descfont, keyfontname, &stringlength);
if (error) goto returnerror;
stringlength+=2;
error = spsactiondescriptor->getstring(descfont, keyfontname, fontname, stringlength);
if (error) goto returnerror;
info->sfname= fontname;
// font ps name
error = spsactioncontrol->stringidtotypeid("fontpostscriptname", &runtimekeyid);
if (error) goto returnerror;
error = spsactiondescriptor->getstringlength(descfont, runtimekeyid, &strl);
if (error) goto returnerror;
strl+=2;
error = spsactiondescriptor->getstring(descfont, runtimekeyid, fontpsname, strl);
if (error) goto returnerror;
info->spsname=fontpsname;
//font name style
error = spsactiondescriptor->getstringlength(descfont, keyfontstylename, &stringlength);
if (error) goto returnerror;
stringlength+=2;
error = spsactiondescriptor->getstring(descfont, keyfontstylename, fontstyle, stringlength);
if (error) goto returnerror;
info->sfstyle= fontstyle;
//etc...
hope helps,
regards,
momir
More discussions in Photoshop Plugin and Companion App SDK
adobe

Comments
Post a Comment