Я хотел бы написать скрипт для Photoshop CS2 в js, который окрашивает ключевые слова sql внутри TextLayer, например, в синий цвет, а не ключевые слова в черный. Я знаю, что в графическом интерфейсе есть поддержка нескольких цветов в одном TextLayer, но в документации для js ничего не упоминается о нескольких цветах для ArtLayer, а также нет упоминаний в документации по объекту TextItem. Я изменил цвет первой буквы в текстовом слое, и возвращается только ее цвет. Вот мой код:
// 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 имеет несколько цветов, но возвращает только RED. Но я хотел бы иметь список SolidColor или другой способ получить цвета :) Есть ли способ получить все цвета из одного текстового слоя ?
app.activeDocument.activeLayer
— это DOM Photoshop, и в нем отсутствует много информации. Существует второй более глубокий уровень кода Photoshop (ActionDesriptors), содержащий большую часть того, что происходит в PS. Дополнительные сведения см. в библиотеке ActionManagerHumanizer. - person Sergey Kritskiy   schedule 12.07.2020