Select only the text layers.

Contributor ,
Mar 31, 2020 Mar 31, 2020

Copy link to clipboard

Copied

Hello everyone, are you all right?
Can a script select all text layers?
If possible, please share.
Thanks.

TOPICS
Actions and scripting

Views

1.6K

Likes

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

correct answers 2 Correct Answers

Enthusiast , Mar 31, 2020 Mar 31, 2020
If the layer structure was very simple, it worked with this script.The operating conditions are The text layer is not in a layer group, There must be no more than one layer with the same name. It is very troublesome because the group must be expanded on the layer panel to select the layer in the group. I don't want to do it as a volunteer ... var doc = app.activeDocument; var myLayers = doc.layers; for(var i = 0; i < myLayers.length; i++){ alert(myLayers[i].name); if(myLayers[i].kind == ...

Likes

Translate

Translate
Enthusiast , Mar 31, 2020 Mar 31, 2020
select all text layers, include layers in layerSets: var AM = new ActionManager if (app.documents.length) selectTextLrs () function selectTextLrs() { var output = [], from = AM.getDocProperty('hasBackgroundLayer') ? 0 : 1, to = AM.getDocProperty('numberOfLayers') if (to) AM.deselectLayers () for (var i = from; i <= to; i++) { if (AM.getLayerProperty('layerKind', i) == 3) AM.selectLayerByIndex (i,true) } } function ActionManager(...

Likes

Translate

Translate
Adobe Community Professional ,
Mar 31, 2020 Mar 31, 2020

Copy link to clipboard

Copied

Hi it's very easy in the new version of Photoshop check the attached picture you will understand.....regards

 

text layer.JPG

Ali Sajjad

Likes

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
Contributor ,
Mar 31, 2020 Mar 31, 2020

Copy link to clipboard

Copied

I need to do this, but with scripts, I believe it is possible.

Likes

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 Professional ,
Mar 31, 2020 Mar 31, 2020

Copy link to clipboard

Copied

You need to check on google for it...goodluck

Ali Sajjad

Likes

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
Enthusiast ,
Mar 31, 2020 Mar 31, 2020

Copy link to clipboard

Copied

If the layer structure was very simple, it worked with this script.

The operating conditions are
The text layer is not in a layer group,
There must be no more than one layer with the same name.
It is very troublesome because the group must be expanded on the layer panel to select the layer in the group. I don't want to do it as a volunteer ...

 

var doc = app.activeDocument;
var myLayers = doc.layers;
for(var i = 0; i < myLayers.length; i++){
    alert(myLayers[i].name);
    if(myLayers[i].kind == LayerKind.TEXT){
        selectFunc(myLayers[i].name);
        }
    else{
        deselectFunc(myLayers[i].name);
        }
    }

function selectFunc(name){
    var idslct = charIDToTypeID( "slct" );
    var pepsi = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
    var google = new ActionReference();
    var idLyr = charIDToTypeID( "Lyr " );
    google.putName( idLyr, name );
    pepsi.putReference( idnull, google );
    var idselectionModifier = stringIDToTypeID( "selectionModifier" );
    var idselectionModifierType = stringIDToTypeID( "selectionModifierType" );
    var idaddToSelection = stringIDToTypeID( "addToSelection" );
    pepsi.putEnumerated( idselectionModifier, idselectionModifierType, idaddToSelection );
    var idMkVs = charIDToTypeID( "MkVs" );
    pepsi.putBoolean( idMkVs, false );
    executeAction( idslct, pepsi, DialogModes.NO );
    }

function deselectFunc(name){
    var idslct = charIDToTypeID( "slct" );
    var pepsi = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
    var google = new ActionReference();
    var idLyr = charIDToTypeID( "Lyr " );
    google.putName( idLyr, name );
    pepsi.putReference( idnull, google );
    var idselectionModifier = stringIDToTypeID( "selectionModifier" );
    var idselectionModifierType = stringIDToTypeID( "selectionModifierType" );
    var idremoveFromSelection = stringIDToTypeID( "removeFromSelection" );
    pepsi.putEnumerated( idselectionModifier, idselectionModifierType, idremoveFromSelection );
    var idMkVs = charIDToTypeID( "MkVs" );
    pepsi.putBoolean( idMkVs, false );
    executeAction( idslct, pepsi, DialogModes.NO );
    }

 

Likes

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 Professional ,
Apr 01, 2020 Apr 01, 2020

Copy link to clipboard

Copied

Thank you for sharing ajabon!

Likes

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
Enthusiast ,
Apr 01, 2020 Apr 01, 2020

Copy link to clipboard

Copied

I tried DmitryEgorov. It didn't work in CS6, but it worked perfectly in CC. This is respect!

Likes

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
Enthusiast ,
Apr 02, 2020 Apr 02, 2020

Copy link to clipboard

Copied

in cs6 replace 

 

var output = [],
        from = AM.getDocProperty('hasBackgroundLayer') ? 0 : 1,
        to = AM.getDocProperty('numberOfLayers')

 

with

 

var output = [],
    to = AM.getDocProperty('numberOfLayers'),
    from = 0

    try {app.activeDocument.backgroundLayer} catch(e) {from ++}

 

 Adobe periodically updates Action Manager properties of objects. There is no property "hasBackgroundLayer" in versions early than CC 😞

Likes

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
Enthusiast ,
Apr 02, 2020 Apr 02, 2020

Copy link to clipboard

Copied

It is terrible that the property disappears in the upper version!
Thanks for your detailed description and script supplement. (º兄º)ノ

Likes

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
Enthusiast ,
Apr 02, 2020 Apr 02, 2020

Copy link to clipboard

Copied

СС (jun 2013) is newer than CS6 (may 2012)

Likes

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
New Here ,
May 19, 2021 May 19, 2021

Copy link to clipboard

Copied

LATEST

I just signed up to say thankyou, it worked perfectly, you're a lifesaver. I used your script in CS6 to batch process 200+ photoshop files that needed editing, instead of taking me days it took just an hour or so. 😃

It's to help an 87 year old friend of mine finish a book they've been writing, they put the whole thing together one page at a time in photoshop with pictures and stuff, but the publishers need a text only version, I cant imagine how long it would have taken me without your help.

Likes

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
Enthusiast ,
Mar 31, 2020 Mar 31, 2020

Copy link to clipboard

Copied

select all text layers, include layers in layerSets:

 

var AM = new ActionManager
    if (app.documents.length) selectTextLrs ()

function selectTextLrs() {
    var output = [],
        from = AM.getDocProperty('hasBackgroundLayer') ? 0 : 1,
        to = AM.getDocProperty('numberOfLayers')
        
        if (to) AM.deselectLayers ()
        
    for (var i = from; i <= to; i++) {
        if (AM.getLayerProperty('layerKind', i) == 3) AM.selectLayerByIndex (i,true)
    }
}

function ActionManager() {

    this.getDocProperty = function (property) {
        property = s2t(property)
        var ref = new ActionReference()
        ref.putProperty(s2t("property"), property)
        ref.putEnumerated(s2t("document"), s2t("ordinal"), s2t("targetEnum"))
        return getDescValue(executeActionGet(ref), property)
    }

    this.getLayerProperty = function (property, index) {
        property = s2t(property)
        var ref = new ActionReference()
        ref.putProperty(s2t("property"), property)
        ref.putIndex(s2t("layer"), index)
        return getDescValue(executeActionGet(ref), property)
    }

    this.selectLayerByIndex = function (idx, addToSelection) {
        var desc = new ActionDescriptor()
        var ref = new ActionReference()
        ref.putIndex(s2t("layer"), idx)
        desc.putReference(s2t("null"), ref)
        if (addToSelection) desc.putEnumerated(s2t("selectionModifier"), s2t("addToSelectionContinuous"), s2t("addToSelection"))
        executeAction(s2t("select"), desc, DialogModes.NO);
    }

    this.deselectLayers = function () {
        var desc = new ActionDescriptor()
        var ref = new ActionReference()
        ref.putEnumerated(s2t("layer"), s2t("ordinal"), s2t("targetEnum"))
        desc.putReference(s2t("null"), ref)
        executeAction(s2t("selectNoLayers"), desc, DialogModes.NO)
    }

    function getDescValue(desc, property) {

        switch (desc.getType(property)) {
            case DescValueType.OBJECTTYPE:
                return (desc.getObjectValue(property));
                break;
            case DescValueType.LISTTYPE:
                return desc.getList(property);
                break;
            case DescValueType.REFERENCETYPE:
                return desc.getReference(property);
                break;
            case DescValueType.BOOLEANTYPE:
                return desc.getBoolean(property);
                break;
            case DescValueType.STRINGTYPE:
                return desc.getString(property);
                break;
            case DescValueType.INTEGERTYPE:
                return desc.getInteger(property);
                break;
            case DescValueType.LARGEINTEGERTYPE:
                return desc.getLargeInteger(property);
                break;
            case DescValueType.DOUBLETYPE:
                return desc.getDouble(property);
                break;
            case DescValueType.ALIASTYPE:
                return desc.getPath(property);
                break;
            case DescValueType.CLASSTYPE:
                return desc.getClass(property);
                break;
            case DescValueType.UNITDOUBLE:
                return (desc.getUnitDoubleValue(property));
                break;
            case DescValueType.ENUMERATEDTYPE:
                return (t2s(desc.getEnumerationValue(property)));
                break;
            case DescValueType.RAWTYPE:
                var tempStr = desc.getData(property);
                var rawData = new Array();
                for (var tempi = 0; tempi < tempStr.length; tempi++) {
                    rawData[tempi] = tempStr.charCodeAt(tempi);
                }
                return rawData;
                break;
            default:
                break;
        };
    }

    function s2t(s) { return stringIDToTypeID(s) }
    function t2s(t) { return typeIDToStringID(t) }
}

 

Likes

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 Professional ,
Apr 01, 2020 Apr 01, 2020

Copy link to clipboard

Copied

Great job as always DmitryEgorov thank you!

Likes

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 Professional ,
Apr 01, 2020 Apr 01, 2020

Copy link to clipboard

Copied

Hi Dmitry – If I could ask, as I have tested the following in order to extend/modify your script by changing a single digit – what am I missing for layerKind == 4 ???
 
1 = Raster Layers (including Background)
2 = Adjustment Layers
3 = Text Layers
4 = ?
5 = Smart Object Layer
6 = Video Layer
7 = Layer Groups/Sets
8 = 3D Layer
9 = ... What else?

Likes

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
Enthusiast ,
Apr 01, 2020 Apr 01, 2020

Copy link to clipboard

Copied

// SheetKind definitions from USheet.h
const kAnySheet = 0;
const kPixelSheet = 1;
const kAdjustmentSheet = 2;
const kTextSheet = 3;
const kVectorSheet = 4;
const kSmartObjectSheet = 5;
const kVideoSheet = 6;
const kLayerGroupSheet = 7;
const k3DSheet = 8;
const kGradientSheet = 9;
const kPatternSheet = 10;
const kSolidColorSheet = 11;
const kBackgroundSheet = 12;
const kHiddenSectionBounder = 13;

 

(found in  Adobe Photoshop\Required\CopyCSSToClipboard.jsx, tnx to r-bin)

Likes

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
Contributor ,
Apr 01, 2020 Apr 01, 2020

Copy link to clipboard

Copied

I am very grateful to friends: ajabon and DmitryEgorov, both scripts worked perfectly.
Thanks!

Likes

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