Есть ли способ получить все цвета на одном текстовом слое? - PullRequest
1 голос
/ 11 июля 2020

Я хотел бы написать сценарий для Photoshop CS2 в js, который окрашивает sql ключевые слова внутри TextLayer, например, синим, а не ключевые слова - черным. Я знаю, что существует поддержка нескольких цветов в одном TextLayer в gui, но в документации для js ничего не упоминается о нескольких цветах для ArtLayer, а также не упоминается в документации объекта TextItem. Я изменил цвет первой буквы в Textlayer, и возвращается только ее цвет. Вот мой код:

// enable double clicking from the Macintosh Finder or the Windows Explorer
#target photoshop

// in case we double clicked the file
app.bringToFront();

var doc = app.activeDocument;
var layers = collectAllLayers(doc);

// save all layers
function collectAllLayers (doc){
    var allLayers = [];
    for (var m = 0; m < doc.layers.length; m++){
        var theLayer = doc.layers[m];
        if (theLayer.typename === "ArtLayer"){
            allLayers.push(theLayer);
        }else{
            collectAllLayers(theLayer, allLayers);
        }
    }
    return allLayers;
}

// only use textlayers that contain this string
const sqlMarkerText = "code:sql";

var textLayers = [];
// save all textlayers containing marker
for(var i = 0; i<layers.length; i++){
    var layer = layers[i];
    if(layer.kind == LayerKind.TEXT && layer.name.indexOf(sqlMarkerText) != -1)
        textLayers.push(layer);    
}

После этого я использую следующий метод для получения цвета:

// display color for layer
for(var i = 0; i<textLayers.length; i++){
    var layer = layers[i];
    alert(layer.textItem.color.rgb.hexValue);
}

color возвращает только SolidColor. Как показано на изображении ниже, один TextLayer имеет несколько цветов, но возвращает только КРАСНЫЙ. только один TextLayer Но я бы хотел иметь список SolidColor или другой способ получить цвета :) Есть ли способ получить все цвета из одного текстового слоя ?

1 Ответ

0 голосов
/ 11 июля 2020

Вы можете использовать jQuery .css(), чтобы получить свойства CSS элементов html.

В приведенном ниже примере ищется цвет «промежутков», но в в вашем случае просто примените тот же logi c к вашим текстовым слоям, которые вы получаете с помощью var layers = collectAllLayers(doc);

<!DOCTYPE html>
<html>
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <title>Test</title>
</head>
<body>



    
<div>
    <span style="color: red">Hey, </span>
    <span style="color: green">this </span>
    <span style="color: blue">is</span>
    <span style="color: lightgreen">a </span>
    <span style="color: orange">sentence</span>
</div>

<div id="result"></div>


</body>


<script type="text/javascript">
    
    function getColors(){
        //Store colors in array
        var arr = [];
        
        //Get elements you need the color from
        var elm = document.querySelectorAll('span');

        //Loop through each element and store its color in an array (with jQuery .css())
        elm.forEach(item => {
            console.log($(item).css('color'));
            arr.push($(item).css('color'));
        });

        document.getElementById('result').innerHTML = arr;
    }

getColors();
</script>
</html>
...