Javascript Photoshop: Syntax for changing text color of an already existing text layer

4k views Asked by At

I've created a photoshop action that adds a string of white text to a photo. In this action, I wrote a script that extends the canvas size and resizes the text within the extra canvas space to fit the dimensions of the image, creating a 'text tab' on the photo. However, after the action and script are implemented, the color of the text in the tab is often... not white.

What is the scripting syntax I can use to change the color of the text layer to white, to ensure it doesn't randomly change color?

For reference, here is the portion of my script that edits the text layer:

#target photoshop


var originalRulerUnits = app.preferences.rulerUnits;  
app.preferences.rulerUnits = Units.INCHES; 

var doc = app.activeDocument;  
var layer = doc.activeLayer;  

app.preferences.rulerUnits = Units.PIXELS; 

//create the color for the tab extension
var black = new SolidColor();  
black.rgb.hexValue = "111111";
app.backgroundColor = black;


//*****************************FOR EXTENDING CANVAS AND POSITIONING/RESIZING THE TEXT LAYER*********************************

var orgWidth = doc.width;
var orgHeight = doc.height;

if(orgWidth>orgHeight) //if document is landscape, resize text to fill a smaller portion of the tab
{
    layer.resize(((orgWidth-orgWidth*.2)/(layer.bounds[2]-layer.bounds[0]))*100,(orgWidth*.017/(layer.bounds[3]-layer.bounds[1]))*100,AnchorPosition.TOPLEFT);     

    doc.resizeCanvas(doc.width, (orgHeight + orgWidth*.04), AnchorPosition.TOPCENTER);

    layer.translate(undefined, new UnitValue(0-layer.bounds[1].as('px'),'px'));  
    layer.translate(undefined, orgHeight); 
    layer.translate(undefined, (orgWidth*.02-((layer.bounds[3]-layer.bounds[1])/2.3)));    


}
else //otherwise, resize text to fill a larger portion of the tab
{
    layer.resize(((orgWidth-orgWidth*.05)/(layer.bounds[2]-layer.bounds[0]))*100,(orgWidth*.017/(layer.bounds[3]-layer.bounds[1]))*100,AnchorPosition.TOPLEFT); 

    doc.resizeCanvas(doc.width, (orgHeight + orgWidth*.04), AnchorPosition.TOPCENTER);

    layer.translate(undefined, new UnitValue(0-layer.bounds[1].as('px'),'px'));  
    layer.translate(undefined, orgHeight); 
    layer.translate(undefined, (orgWidth*.02-((layer.bounds[3]-layer.bounds[1])/2.3))); 



}


var layerWidth = Number(layer.bounds[2] - layer.bounds[0]);
var dX = (orgWidth - layerWidth) / 2 - Number(layer.bounds[0]);
layer.translate(dX, undefined);


doc.flatten(); //flatten the text into the photo

app.preferences.rulerUnits = originalRulerUnits;  
1

There are 1 answers

1
Ghoul Fool On BEST ANSWER

It might be easier for you to code the text addition. Here's a handy function I wrote for such an occasion. The text is justified centre, but you can adjust that. (I would have included that part of the function but it looks like IF spaghetti)

var x = (app.activeDocument.width.value)/2;
var y = (app.activeDocument.height.value)/2;

createText("Arial-BoldMT", 10.0, 255,255,255, "Gwen Stefanni is bananas", x, y)


// function CREATE TEXT(typeface, size, R, G, B, text content, text X pos, text Y pos)
// --------------------------------------------------------
function createText(fface, size, colR, colG, colB, content, tX, tY)
{

  // Add a new layer in the new document
  var artLayerRef = app.activeDocument.artLayers.add()

  // Specify that the layer is a text layer
  artLayerRef.kind = LayerKind.TEXT

  //This section defines the color of the hello world text
  textColor = new SolidColor();
  textColor.rgb.red = colR;
  textColor.rgb.green = colG;
  textColor.rgb.blue = colB;

  //Get a reference to the text item so that we can add the text and format it a bit
  textItemRef = artLayerRef.textItem
  textItemRef.font = fface;
  textItemRef.contents = content;
  textItemRef.color = textColor;
  textItemRef.size = size
  textItemRef.position = new Array(tX, tY) //pixels from the left, pixels from the top
  var just = Justification.CENTER;

  activeDocument.activeLayer.textItem.justification = just;
}