Skip to main content
Participating Frequently
September 29, 2020
해결됨

Change a certain color of texts to a new color

  • September 29, 2020
  • 2 답변들
  • 1304 조회

I want to change the pink color of the text to a violet color in all the artboards in one document by script/action. Can anyone help me? Am attaching a screenshot for more clarity.

이 주제는 답변이 닫혔습니다.
최고의 답변: jazz-y

* this is code from another project, there was an additional check for the presence of a background layer
EDIT 1:

#target photoshop

var oldColor = [255, 0, 0], // [R,G,B]
    newColor = [0, 255, 0], // [R,G,B]
    s2t = stringIDToTypeID;

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

for (var i = 1; i <= len; i++) {
    (r = new ActionReference()).putProperty(s2t('property'), p = s2t('textKey'));
    r.putIndex(s2t('layer'), i);
    if (executeActionGet(r).hasKey(p)) {
        var textKey = executeActionGet(r).getObjectValue(p),
            styleList = textKey.getList(s2t('textStyleRange')),
            l = new ActionList(),
            d = new ActionDescriptor(),
            z = false;
        for (var x = 0; x < styleList.count; x++) {
            k = styleList.getObjectValue(x)
            if (k.getObjectValue(s2t('textStyle')).hasKey(s2t('color'))) {
                s = k.getObjectValue(s2t('textStyle'))
                c = s.getObjectValue(s2t('color'))
                if ((c.getInteger(s2t('red')) == oldColor[0] && c.getInteger(s2t('grain')) == oldColor[1] && c.getInteger(s2t('blue')) == oldColor[2])) {
                    var d = new ActionDescriptor();
                    d.putDouble(s2t('red'), newColor[0])
                    d.putDouble(s2t('grain'), newColor[1])
                    d.putDouble(s2t('blue'), newColor[2])
                    s.putObject(s2t('color'), s2t('RGBColor'), d)
                }
                k.putObject(s2t('textStyle'), s2t('textStyle'), s)
            }
            l.putObject(s2t('textStyleRange'), k)
        }
        if (d.count) {
            textKey.putList(s2t('textStyleRange'), l)
            var d = new ActionDescriptor();
            (r = new ActionReference()).putIndex(s2t('layer'), i);
            d.putReference(s2t('null'), r);
            d.putObject(s2t('to'), s2t('textLayer'), textKey);
            executeAction(s2t('set'), d, DialogModes.NO);
        }
    }
}

* don't forget to change the color values at the beginning of the script as desired:

oldColor = [255, 0, 0], // [R,G,B]
newColor = [0, 255, 0], // [R,G,B]

 

2 답변

Legend
September 29, 2020
#target photoshop

var oldColor = [255, 0, 0], // [R,G,B]
    newColor = [0, 255, 0], // [R,G,B]
    s2t = stringIDToTypeID;

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

for (var i = 0; i <= len; i++) {
    (r = new ActionReference()).putProperty(s2t('property'), p = s2t('textKey'));
    r.putIndex(s2t('layer'), i);
    if (executeActionGet(r).hasKey(p)) {
        var textKey = executeActionGet(r).getObjectValue(p),
            styleList = textKey.getList(s2t('textStyleRange')),
            l = new ActionList(),
            d = new ActionDescriptor(),
            z = false;
        for (var x = 0; x < styleList.count; x++) {
            k = styleList.getObjectValue(x)
            if (k.getObjectValue(s2t('textStyle')).hasKey(s2t('color'))) {
                s = k.getObjectValue(s2t('textStyle'))
                c = s.getObjectValue(s2t('color'))
                if ((c.getInteger(s2t('red')) == oldColor[0] && c.getInteger(s2t('grain')) == oldColor[1] && c.getInteger(s2t('blue')) == oldColor[2])) {
                    var d = new ActionDescriptor();
                    d.putDouble(s2t('red'), newColor[0])
                    d.putDouble(s2t('grain'), newColor[1])
                    d.putDouble(s2t('blue'), newColor[2])
                    s.putObject(s2t('color'), s2t('RGBColor'), d)
                }
                k.putObject(s2t('textStyle'), s2t('textStyle'), s)
            }
            l.putObject(s2t('textStyleRange'), k)
        }
        if (d.count) {
            textKey.putList(s2t('textStyleRange'), l)
            var d = new ActionDescriptor();
            (r = new ActionReference()).putIndex(s2t('layer'), i);
            d.putReference(s2t('null'), r);
            d.putObject(s2t('to'), s2t('textLayer'), textKey);
            executeAction(s2t('set'), d, DialogModes.NO);
        }
    }
}
Abin0D4D작성자
Participating Frequently
September 29, 2020

So I just have to run this code as .js in scripts right?

c.pfaffenbichler
Community Expert
Community Expert
September 29, 2020

How familiar are you with JavaScript and Photoshop’s Action Manager code? 

Abin0D4D작성자
Participating Frequently
September 29, 2020

Am not an expert actually. So I just have to run this code as .js in scripts right?