• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
0

How can I randomly apply one of a limited number of fonts to a set of layered images, in Data Driven Graphics?

Explorer ,
Jan 18, 2018 Jan 18, 2018

Copy link to clipboard

Copied

Hello,

If you're familiar with 'Data Driven Graphics' aka 'Variables' option in Photoshop, I've the following concern:

1. I want to create 300 Quote graphics using 'Variables' option of Photoshop. I know how to achieve this using Variables.. like giving input text file (which is Text Quotes here) and then assigning Image ids to each quote (all images in same folder)... and achieve this by creating a PSD template.

So far so good...

Now, what I'm unable to achieve is this:

2. How can I choose, not just one font, for type layers (which are Text Quote and Author name here) but randomly apply one of a limited number of fonts to a set of layered images? Let's say I select 2-4 specific fonts and photoshop script should use them randomly for the set.

Is this something achievable?

I've already inquired about this earlier(not exactly for this feature though)... so below are those threads as reference.

1. PS Action needed to batch create quote graphics UNIQUELY

2. How to batch create quote graphics UNIQUELY with Data Variables or Action Or Script?

3. How to select multiple fonts in Data Driven Graphics?

A solution is much needed.Thank you.

c.c. c.pfaffenbichler​ Trevor.Dennis​ Ninjaconsultant​ Bojan Živković​

TOPICS
Actions and scripting

Views

716

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe
Community Expert ,
Jan 21, 2018 Jan 21, 2018

Copy link to clipboard

Copied

LATEST

Not sure if this would be useful in your workflow but the following would change all Type Layers’s fonts to one from an Array of fonts.

// 2017, use it at your own risk;

#target photoshop

if (app.documents.length > 0) {

var myDocument = app.activeDocument;

var theFonts = ["Impact", "Courier-Bold", "Times-BoldItalic"];

var theNumberOfFonts = theFonts.length;

var theTypeLayers = collectTypeLayers ();

for (var m = 0; m < theTypeLayers.length; m++) {

changeFont (theFonts[Math.floor (Math.random()*theNumberOfFonts)], theTypeLayers[1])

};

};

////// collect type layers //////

function collectTypeLayers () {

// the file;

var myDocument = app.activeDocument;

// get number of layers;

var ref = new ActionReference();

ref.putEnumerated( charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );

var applicationDesc = executeActionGet(ref);

var theNumber = applicationDesc.getInteger(stringIDToTypeID("numberOfLayers"));

// process the layers;

var theLayers = new Array;

for (var m = 0; m <= theNumber; m++) {

try {

var ref = new ActionReference();

ref.putIndex( charIDToTypeID( "Lyr " ), m);

var layerDesc = executeActionGet(ref);

var layerSet = typeIDToStringID(layerDesc.getEnumerationValue(stringIDToTypeID("layerSection")));

var isBackground = layerDesc.getBoolean(stringIDToTypeID("background"));

// if not layer group collect values;

if (layerSet != "layerSectionEnd" && layerSet != "layerSectionStart" && isBackground != true && layerDesc.hasKey(stringIDToTypeID("textKey")) == true) {

var theName = layerDesc.getString(stringIDToTypeID('name'));

var theID = layerDesc.getInteger(stringIDToTypeID('layerID'));

theLayers.push([theName, theID])

};

}

catch (e) {};

};

return theLayers

};

////// change font //////

function changeFont (theFont, theID) {

// =======================================================

var idsetd = charIDToTypeID( "setd" );

    var desc2 = new ActionDescriptor();

    var idnull = charIDToTypeID( "null" );

        var ref1 = new ActionReference();

        var idPrpr = charIDToTypeID( "Prpr" );

        var idTxtS = charIDToTypeID( "TxtS" );

        ref1.putProperty( idPrpr, idTxtS );

        ref1.putIdentifier(charIDToTypeID( "TxLr" ), theID);

    desc2.putReference( idnull, ref1 );

    var idT = charIDToTypeID( "T   " );

        var desc3 = new ActionDescriptor();

        var idfontPostScriptName = stringIDToTypeID( "fontPostScriptName" );

        desc3.putString( idfontPostScriptName, theFont );

    desc2.putObject( idT, idTxtS, desc3 );

executeAction( idsetd, desc2, DialogModes.NO );

};

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines