Skip to main content
Mohamed Hameed21513110
Inspiring
November 27, 2021
Answered

Photosho Script Copy Text Layer Parameters to another selected text

  • November 27, 2021
  • 1 reply
  • 1392 views

Hi

I work on a lot of files that contain text
I want a script code that copies the text layers (font, size, color) and pastes it to other selected texts.

This topic has been closed for replies.
Correct answer jazz-y

the script code work but only two text layer

i want script work for multi textlayer not one


It seems to me that you are not even trying to figure out the code, the link to which I gave you. Each time I essentially leave the @r-bin function unchanged, only change the parameters that are passed to it 🤷

 

#target photoshop

s2t = stringIDToTypeID;

(ref = new ActionReference()).putProperty(s2t('property'), p = s2t('numberOfLayers'));
ref.putEnumerated(s2t('document'), s2t('ordinal'), s2t('targetEnum'));
var len = executeActionGet(ref).getInteger(p);

(ref = new ActionReference()).putProperty(s2t('property'), p = s2t('layerID'));
ref.putEnumerated(s2t('layer'), s2t('ordinal'), s2t('targetEnum'));
var cur = executeActionGet(ref).getInteger(p);

var lrs = []
for (var i = 1; i <= len; i++) {
    (ref = new ActionReference()).putProperty(s2t('property'), p = s2t('layerKind'));
    ref.putIndex(s2t('layer'), i);
    if (executeActionGet(ref).getInteger(p) == 3) {
        (ref = new ActionReference()).putProperty(s2t('property'), p = s2t('layerID'));
        ref.putIndex(s2t('layer'), i);
        if (executeActionGet(ref).getInteger(p) != cur) lrs.push(executeActionGet(ref).getInteger(p));
    }
}

for (var i = 0; i < lrs.length; i++) set_text_contents (cur, lrs[i])

function set_text_contents(source, target) {
    try {
        var sep = /(,|\.|\s)/;
        var r = new ActionReference();
        r.putIdentifier(s2t("layer"), source);
        var textKey = executeActionGet(r).getObjectValue(s2t("textKey"));
        var style_list = textKey.getList(s2t("textStyleRange"));
        var parag_list = textKey.getList(s2t("paragraphStyleRange"));
        var style0 = style_list.getObjectValue(0).getObjectValue(s2t("textStyle"));
        var parag0 = parag_list.getObjectValue(0).getObjectValue(s2t("paragraphStyle"));
        var old_text = executeActionGet(r).getObjectValue(s2t("textKey")).getString(s2t("textKey"));

        var r1 = new ActionReference();
        r1.putIdentifier(s2t("layer"), target);
        var text = executeActionGet(r1).getObjectValue(s2t("textKey")).getString(s2t("textKey"));
        var old_textKey = executeActionGet(r1).getObjectValue(s2t("textKey"))

        var styles = new Array();
        var from = 0;
        var to = old_text.length + 1;
        var def_style;
        for (var i = 0; i < old_text.length; i++) {
            if (old_text.charAt(i).match(sep)) {
                to = i + 1;
                styles.push([from, to, style0, parag0]);
                from = to;
            }
        }
        styles.push([from, to, style0, parag0]);
        for (var i = 0; i < style_list.count; i++) {
            var d = style_list.getObjectValue(i);
            var x0 = d.getInteger(s2t("from"));
            var x1 = d.getInteger(s2t("to"));
            var st = d.getObjectValue(s2t("textStyle"));
            for (var n = 0; n < styles.length; n++) {
                if (styles[n][0] >= x0) {
                    styles[n][2] = st;
                }
            }
        }
        for (var i = 0; i < parag_list.count; i++) {
            var d = parag_list.getObjectValue(i);
            var x0 = d.getInteger(s2t("from"));
            var x1 = d.getInteger(s2t("to"));
            var st = d.getObjectValue(s2t("paragraphStyle"));
            if (!i && st.hasKey(s2t("defaultStyle"))) def_style = st.getObjectValue(s2t("defaultStyle"));
            for (var n = 0; n < styles.length; n++) {
                if (styles[n][0] >= x0) {
                    styles[n][3] = st;
                }
            }
        }
        var from = 0;
        var to = text.length + 1;
        var idx = 0;
        for (var i = 0; i < text.length; i++) {
            if (text.charAt(i).match(sep)) {
                to = i + 1;
                styles[idx][0] = from;
                styles[idx][1] = to;
                from = to;
                if (idx >= styles.length - 1) break;
                ++idx;
            }
        }
        if (idx > 0) styles[idx][0] = styles[idx - 1][1];
        styles[idx][1] = text.length + 1;
        var new_style = new ActionList();
        var new_parag = new ActionList();
        for (var i = 0; i < styles.length; i++) {
            var d = new ActionDescriptor();
            d.putInteger(s2t("from"), styles[i][0]);
            d.putInteger(s2t("to"), styles[i][1]);
            if (def_style) extend_descriptor(def_style, styles[i][2])
            d.putObject(s2t("textStyle"), s2t("textStyle"), styles[i][2]);
            new_style.putObject(s2t("textStyleRange"), d);
            var d = new ActionDescriptor();
            d.putInteger(s2t("from"), styles[i][0]);
            d.putInteger(s2t("to"), styles[i][1]);
            d.putObject(s2t("paragraphStyle"), s2t("paragraphStyle"), styles[i][3]);
            new_parag.putObject(s2t("paragraphStyleRange"), d);
        }

        old_textKey.putList(s2t("textStyleRange"), new_style);
        old_textKey.putList(s2t("paragraphStyleRange"), new_parag);
        old_textKey.putString(s2t("textKey"), text);

        var d = new ActionDescriptor();
        d.putReference(s2t("null"), r1);
        d.putObject(s2t("to"), s2t("textLayer"), old_textKey);
        executeAction(s2t("set"), d, DialogModes.NO);
    }
    catch (e) { alert(e); }
}
function extend_descriptor(src_desc, dst_desc) {
    try {
        for (var i = 0; i < src_desc.count; i++) {
            var key = src_desc.getKey(i);
            if (dst_desc.hasKey(key)) continue;
            var type = src_desc.getType(key);
            switch (type) {
                case DescValueType.ALIASTYPE: dst_desc.putPath(key, src_desc.getPath(key)); break;
                case DescValueType.BOOLEANTYPE: dst_desc.putBoolean(key, src_desc.getBoolean(key)); break;
                case DescValueType.CLASSTYPE: dst_desc.putClass(key, src_desc.getClass(key)); break;
                case DescValueType.DOUBLETYPE: dst_desc.putDouble(key, src_desc.getDouble(key)); break;
                case DescValueType.INTEGERTYPE: dst_desc.putInteger(key, src_desc.getInteger(key)); break;
                case DescValueType.LISTTYPE: dst_desc.putList(key, src_desc.getList(key)); break;
                case DescValueType.RAWTYPE: dst_desc.putData(key, src_desc.getData(key)); break;
                case DescValueType.STRINGTYPE: dst_desc.putString(key, src_desc.getString(key)); break;
                case DescValueType.LARGEINTEGERTYPE: dst_desc.putLargeInteger(key, src_desc.getLargeInteger(key)); break;
                case DescValueType.REFERENCETYPE: dst_desc.putReference(key, src_desc.getReference(key)); break;
                case DescValueType.OBJECTTYPE:
                    dst_desc.putObject(key, src_desc.getObjectType(key), src_desc.getObjectValue(key));
                    break;

                case DescValueType.ENUMERATEDTYPE:
                    dst_desc.putEnumerated(key, src_desc.getEnumerationType(key), src_desc.getEnumerationValue(key));
                    break;

                case DescValueType.UNITDOUBLE:
                    dst_desc.putUnitDouble(key, src_desc.getUnitDoubleType(key), src_desc.getUnitDoubleValue(key));
                    break;

                default: alert("Unknown data type in descriptor"); return false;
            }
        }
        return true;
    }
    catch (e) { throw (e); }
}

 

 

1 reply

c.pfaffenbichler
Community Expert
Community Expert
November 27, 2021

Please provide a meaningful description of the intended process (including screenshots that include the pertinent Panels). 

Mohamed Hameed21513110
Inspiring
November 27, 2021

Ok, I have attached a file for clarification
In the photo before and after

I hope the idea is clear

Mohamed Hameed21513110
Inspiring
November 27, 2021

Fragments of text on different layers, or is it all one layer? How should the script understand from which text to take the style and into which text to insert it?

Show the structure of the layers of the document (or upload a test document)


I attached a video link for you with the same idea what I want, but I couldn't find the code
I hope the video explains the idea more

https://www.youtube.com/watch?v=IzS2D8P2Dag