add text layors

Anyone, especially newbies, asking for help with Photoshop Scripting and Photoshop Automation - as opposed to those contributing to discussion about an aspect of Photoshop Scripting

Moderators: Tom, Kukurykus

somewhereinusa

add text layors

Post by somewhereinusa »

I've had very little luck trying to search this forum, it keeps telling me I'm using too common of words.
I would like to create a gui that would give me place to add, say four layers of text that could be typed into a box.
Script would start by opening a box that had four spaces to type in info, one layer to a box, if one box is empty then it would not create that layer.
Font size and color could then be changed when the layers are created on the photo. Is this even possible? I've done a little scripting, but don't even know
how to begin this one.


example

Thanks,
Dick

Professional AI Audio Generation within Adobe Premiere Pro - Download Free Plugin here

Paul MR

add text layors

Post by Paul MR »

Here is one example, it does need to have a document open!
Code: Select all#target photoshop
main();
function main(){
if(!documents.length) return;
var win = new Window('dialog','Text Demo');
win.pnl1 = win.add('panel', undefined, undefined, {borderStyle:"black"});
win.grp5 = win.pnl1.add('group');
win.grp5.st1 = win.grp5.add('statictext',undefined,'Add Text Layers');
win.grp5.st1.graphics.font = ScriptUI.newFont("Georgia","BOLDITALIC",22);
win.grp10 = win.pnl1.add('group');
win.grp10.st1 = win.grp10.add('statictext',undefined,'Layer 1');
win.grp10.et1 = win.grp10.add('edittext');
win.grp10.et1.preferredSize=[400,20];
win.grp11 = win.pnl1.add('group');
win.grp11.st1 = win.grp11.add('statictext',undefined,'Layer 2');
win.grp11.et1 = win.grp11.add('edittext');
win.grp11.et1.preferredSize=[400,20];
win.grp12 = win.pnl1.add('group');
win.grp12.st1 = win.grp12.add('statictext',undefined,'Layer 3');
win.grp12.et1 = win.grp12.add('edittext');
win.grp12.et1.preferredSize=[400,20];
win.grp13 = win.pnl1.add('group');
win.grp13.st1 = win.grp13.add('statictext',undefined,'Layer 4');
win.grp13.et1 = win.grp13.add('edittext');
win.grp13.et1.preferredSize=[400,20];
win.grp14 = win.pnl1.add('group');
win.grp14.bu1 = win.grp14.add('button',undefined,'Process');
win.grp14.bu2 = win.grp14.add('button',undefined,'Cancel');
win.grp14.bu1.onClick = function(){
    win.close(1);
if(win.grp10.et1.text != ''){
    addtTextLayer(win.grp10.et1.text,18, 'My Layer 1');
    }
if(win.grp11.et1.text != ''){
    addtTextLayer(win.grp11.et1.text,18, 'My Layer 2');
    }
if(win.grp12.et1.text != ''){
    addtTextLayer(win.grp12.et1.text,18, 'My Layer 3');
    }
if(win.grp13.et1.text != ''){
    addtTextLayer(win.grp13.et1.text,18, 'My Layer 4');
    }
}
win.center();
win.show();
}
function addtTextLayer(Contents,fontSize, layerName){
var textColor = new SolidColor();
        textColor.rgb.red  = 0;
        textColor.rgb.green =0;
        textColor.rgb.blue = 0;
var newTextLayer = activeDocument.artLayers.add();
newTextLayer.kind = LayerKind.TEXT;
newTextLayer.name = layerName;
newTextLayer.textItem.kind = TextType.POINTTEXT
newTextLayer.textItem.color = textColor;
newTextLayer.textItem.font = 'Georgia';
newTextLayer.textItem.size = fontSize;
newTextLayer.textItem.contents = Contents;
}
Mike Hale

add text layors

Post by Mike Hale »

Also you can find more info about creating dialogs in the Javascript Tools Guide that ships with Photoshop. You should be able to find it in the ExtendScript Toolkit SDK folder.

The section about dialogs is User-Interface Tools.
txuku

add text layors

Post by txuku »

Hello Mike Hale

Excuse me ....

This may be better off with adjustable positioning layers ?

Like this :


Code: Select all#target photoshop
Large = parseFloat(app.activeDocument.width);
Haut = parseFloat(app.activeDocument.height );

Large1 = 5*Large/100;
Haut1 = 5*Haut/100;

Large2 = 55*Large/100;
Haut2 = 5*Haut/100;

Large3 = 5*Large/100;
Haut3 = 95*Haut/100;

Large4 = 55*Large/100;
Haut4 = 95*Haut/100;

main();
function main(){
if(!documents.length) return;
var win = new Window('dialog','Text Demo');
win.pnl1 = win.add('panel', undefined, undefined, {borderStyle:"black"});
win.grp5 = win.pnl1.add('group');
win.grp5.st1 = win.grp5.add('statictext',undefined,'Add Text Layers');
win.grp5.st1.graphics.font = ScriptUI.newFont("Georgia","BOLDITALIC",22);
win.grp10 = win.pnl1.add('group');
win.grp10.st1 = win.grp10.add('statictext',undefined,'Layer 1');
win.grp10.et1 = win.grp10.add('edittext');
win.grp10.et1.preferredSize=[400,20];
win.grp11 = win.pnl1.add('group');
win.grp11.st1 = win.grp11.add('statictext',undefined,'Layer 2');
win.grp11.et1 = win.grp11.add('edittext');
win.grp11.et1.preferredSize=[400,20];
win.grp12 = win.pnl1.add('group');
win.grp12.st1 = win.grp12.add('statictext',undefined,'Layer 3');
win.grp12.et1 = win.grp12.add('edittext');
win.grp12.et1.preferredSize=[400,20];
win.grp13 = win.pnl1.add('group');
win.grp13.st1 = win.grp13.add('statictext',undefined,'Layer 4');
win.grp13.et1 = win.grp13.add('edittext');
win.grp13.et1.preferredSize=[400,20];
win.grp14 = win.pnl1.add('group');
win.grp14.bu1 = win.grp14.add('button',undefined,'Process');
win.grp14.bu2 = win.grp14.add('button',undefined,'Cancel');
win.grp14.bu1.onClick = function(){
    win.close(1);
if(win.grp10.et1.text != ''){
    addtTextLayer(win.grp10.et1.text,18, 'My Layer 1', Large1, Haut1);
    }
if(win.grp11.et1.text != ''){
    addtTextLayer(win.grp11.et1.text,18, 'My Layer 2', Large2, Haut2);
    }
if(win.grp12.et1.text != ''){
    addtTextLayer(win.grp12.et1.text,18, 'My Layer 3', Large3, Haut3);
    }
if(win.grp13.et1.text != ''){
    addtTextLayer(win.grp13.et1.text,18, 'My Layer 4', Large4, Haut4);
    }
}
win.center();
win.show();
}
function addtTextLayer(Contents,fontSize, layerName, PositionX, PositionY){
var textColor = new SolidColor();
        textColor.rgb.red  = 0;
        textColor.rgb.green =0;
        textColor.rgb.blue = 0;
var newTextLayer = activeDocument.artLayers.add();
newTextLayer.kind = LayerKind.TEXT;
newTextLayer.name = layerName;
newTextLayer.textItem.kind = TextType.POINTTEXT
newTextLayer.textItem.color = textColor;
newTextLayer.textItem.font = 'Georgia';
newTextLayer.textItem.size = fontSize;
newTextLayer.textItem.position = Array( PositionX, PositionY );
newTextLayer.textItem.contents = Contents;
}
somewhereinusa

add text layors

Post by somewhereinusa »

Many thanks to both of you, I can now make the modifications that I need to speed up my work flow at events.
Is there a way to center the center of a line of text on the picture?
txuku

add text layors

Post by txuku »

changes in lines and 11 12 13 and 76 77 78 for My Layer 3

Code: Select all#target photoshop
Large = parseFloat(app.activeDocument.width);
Haut = parseFloat(app.activeDocument.height );

Large1 = 5*Large/100;
Haut1 = 5*Haut/100;

Large2 = 55*Large/100;
Haut2 = 5*Haut/100;

//Pour le centrage de Layer 3
Large3 = Large/2;
Haut3 = Haut/2 - 9 ; // 9 = fontsize/2

Large4 = 55*Large/100;
Haut4 = 95*Haut/100;

main();
function main(){
if(!documents.length) return;
var win = new Window('dialog','Text Demo');
win.pnl1 = win.add('panel', undefined, undefined, {borderStyle:"black"});
win.grp5 = win.pnl1.add('group');
win.grp5.st1 = win.grp5.add('statictext',undefined,'Add Text Layers');
win.grp5.st1.graphics.font = ScriptUI.newFont("Georgia","BOLDITALIC",22);
win.grp10 = win.pnl1.add('group');
win.grp10.st1 = win.grp10.add('statictext',undefined,'Layer 1');
win.grp10.et1 = win.grp10.add('edittext');
win.grp10.et1.preferredSize=[400,20];
win.grp11 = win.pnl1.add('group');
win.grp11.st1 = win.grp11.add('statictext',undefined,'Layer 2');
win.grp11.et1 = win.grp11.add('edittext');
win.grp11.et1.preferredSize=[400,20];
win.grp12 = win.pnl1.add('group');
win.grp12.st1 = win.grp12.add('statictext',undefined,'Layer 3');
win.grp12.et1 = win.grp12.add('edittext');
win.grp12.et1.preferredSize=[400,20];
win.grp13 = win.pnl1.add('group');
win.grp13.st1 = win.grp13.add('statictext',undefined,'Layer 4');
win.grp13.et1 = win.grp13.add('edittext');
win.grp13.et1.preferredSize=[400,20];
win.grp14 = win.pnl1.add('group');
win.grp14.bu1 = win.grp14.add('button',undefined,'Process');
win.grp14.bu2 = win.grp14.add('button',undefined,'Cancel');
win.grp14.bu1.onClick = function(){
    win.close(1);
if(win.grp10.et1.text != ''){
    addtTextLayer(win.grp10.et1.text,18, 'My Layer 1', Large1, Haut1);
    }
if(win.grp11.et1.text != ''){
    addtTextLayer(win.grp11.et1.text,18, 'My Layer 2', Large2, Haut2);
    }
if(win.grp12.et1.text != ''){
    addtTextLayer(win.grp12.et1.text,18, 'My Layer 3', Large3, Haut3);
    }
if(win.grp13.et1.text != ''){
    addtTextLayer(win.grp13.et1.text,18, 'My Layer 4', Large4, Haut4);
    }
}
win.center();
win.show();
}
function addtTextLayer(Contents,fontSize, layerName, PositionX, PositionY){
    var textColor = new SolidColor();
        textColor.rgb.red  = 0;
        textColor.rgb.green =0;
        textColor.rgb.blue = 0;
    var newTextLayer = activeDocument.artLayers.add();
      newTextLayer.kind = LayerKind.TEXT;
      newTextLayer.name = layerName;
      newTextLayer.textItem.kind = TextType.POINTTEXT;
      newTextLayer.textItem.color = textColor;
      //newTextLayer.textItem.justification = Justification.CENTERJUSTIFIED;
      newTextLayer.textItem.font = 'Georgia';
      newTextLayer.textItem.size = fontSize;
      newTextLayer.textItem.contents = Contents;
      var Centrage = newTextLayer.textItem.contents.length*9/2; //Ajout pour centrer
      newTextLayer.textItem.position = Array( PositionX - Centrage , PositionY );

}
somewhereinusa

add text layors

Post by somewhereinusa »

txuku,
Thanks for your help, I've played with the latest you posted, when I run it, it creates the text layers, but there is nothing on them. When I play around with settings, I can get close, then I have to manually move things around to to get centered.

This is what I am striving for. Fonts and color can be changed at any time.


Thanks again,
Dick
txuku

add text layors

Post by txuku »

I work with CS4 it seems to work:

Code: Select all#target photoshop
Large = parseFloat(app.activeDocument.width);
Haut = parseFloat(app.activeDocument.height);

var reglageFont = 18; // si image = 1000x667 fontsize = 18
var reglageEcartTextes = 3; //ecart en hauteur entre textes si image = 1000x667 : 3 px + 18 px ( tailleFont )

if(Haut < Large) { var tailleFont = (Large/1000)*reglageFont; var ecartTextes = (Large/1000)*reglageEcartTextes + tailleFont;};
else { var tailleFont = (Haut/1000)*reglageFont; var ecartTextes = (Haut/1000)*reglageEcartTextes + tailleFont; };

Haut4 = Haut - tailleFont;// ou un poucentage de la hauteur ex : 95/100*Haut
Haut3 = Haut4 - ecartTextes;
Haut2 = Haut3 - ecartTextes;
Haut1 = Haut2 - ecartTextes;

main();
function main(){
if(!documents.length) return;
var win = new Window('dialog','Text Demo');
win.pnl1 = win.add('panel', undefined, undefined, {borderStyle:"black"});
win.grp5 = win.pnl1.add('group');
win.grp5.st1 = win.grp5.add('statictext',undefined,'Add Text Layers');
win.grp5.st1.graphics.font = ScriptUI.newFont("Georgia","BOLDITALIC",22);
win.grp10 = win.pnl1.add('group');
win.grp10.st1 = win.grp10.add('statictext',undefined,'Layer 1');
win.grp10.et1 = win.grp10.add('edittext');
win.grp10.et1.preferredSize=[400,20];
win.grp11 = win.pnl1.add('group');
win.grp11.st1 = win.grp11.add('statictext',undefined,'Layer 2');
win.grp11.et1 = win.grp11.add('edittext');
win.grp11.et1.preferredSize=[400,20];
win.grp12 = win.pnl1.add('group');
win.grp12.st1 = win.grp12.add('statictext',undefined,'Layer 3');
win.grp12.et1 = win.grp12.add('edittext');
win.grp12.et1.preferredSize=[400,20];
win.grp13 = win.pnl1.add('group');
win.grp13.st1 = win.grp13.add('statictext',undefined,'Layer 4');
win.grp13.et1 = win.grp13.add('edittext');
win.grp13.et1.preferredSize=[400,20];
win.grp14 = win.pnl1.add('group');
win.grp14.bu1 = win.grp14.add('button',undefined,'Process');
win.grp14.bu2 = win.grp14.add('button',undefined,'Cancel');
win.grp14.bu1.onClick = function(){
    win.close(1);
if(win.grp10.et1.text != ''){
    addtTextLayer(win.grp10.et1.text,tailleFont, 'My Layer 1', Large/2, Haut1);
    }
if(win.grp11.et1.text != ''){
    addtTextLayer(win.grp11.et1.text,tailleFont, 'My Layer 2', Large/2, Haut2);
    }
if(win.grp12.et1.text != ''){
    addtTextLayer(win.grp12.et1.text,tailleFont, 'My Layer 3', Large/2, Haut3);
    }
if(win.grp13.et1.text != ''){
    addtTextLayer(win.grp13.et1.text,tailleFont, 'My Layer 4', Large/2, Haut4);
    }
}
win.center();
win.show();
}
function addtTextLayer(Contents,fontSize, layerName, PositionX, PositionY){
    var textColor = new SolidColor();
        textColor.rgb.red  = 0;
        textColor.rgb.green =0;
        textColor.rgb.blue = 0;
    var newTextLayer = activeDocument.artLayers.add();
      newTextLayer.kind = LayerKind.TEXT;
      newTextLayer.name = layerName;
      newTextLayer.textItem.kind = TextType.POINTTEXT;
      newTextLayer.textItem.color = textColor;
      newTextLayer.textItem.font = 'Georgia';
      newTextLayer.textItem.size = fontSize;
      newTextLayer.textItem.contents = Contents;
         
      var Centrage = parseFloat(newTextLayer.textItem.contents.length)*fontSize/4;  //Ajout pour centrer
     
      newTextLayer.textItem.position = Array( PositionX - Centrage, PositionY );

}
somewhereinusa

add text layors

Post by somewhereinusa »

I've tried it in CS4 and CS5, I still get blank layers.
Does scripting require translation to english for a computer that has english as it's language?
somewhereinusa

add text layors

Post by somewhereinusa »

Sorry, I was wrong, it was just so small I couldn't see it.