Скрипт: удалить цвет с заменой

Статус
Закрыто для дальнейших ответов.

LeonidB

Их бин
Топикстартер
10 лет на форуме
Сообщения
2 470
Реакции
1 530
Помогите, пожалуйста, если это не очень трудно, со скриптом для удаления определённого образца цвета (всех его оттенков) с заменой на другой цвет (100 %):

swatch.jpg

В этом примере на скриншоте 3 оттенка - 100, 70 и 50 %, но в каких-то файлах их может быть и больше, а в каких-то - меньше. Но при удалении все их надо заменить на 100 %-ный другой цвет.

И другой вариант задачи: при удалении всех оттенков данного цвета с заменой на другой цвет оттенки должны сохраниться.


Не по теме:
Что-то я искал поиском на форуме, но не нашёл такое. Как-то не верится, что никто до меня о таком не спрашивал. Возможно, искал плохо. :)
 

LeonidB

Их бин
Топикстартер
10 лет на форуме
Сообщения
2 470
Реакции
1 530
Код:
Swatch.remove (replacingWith: Swatch )

Дремучий я в скриптах, однако :) Олег, а как конкретные цвета сюда подставить? Чтобы открыть документ и, не выделяя особо мышкой в палитре образцов эти цвета, запустить скрипт - и заданный в нём цвет (все оттенки) автоматом заменить на другой тоже уже заранее заданный.
Спасибо!
 

kreotiff

Участник
Сообщения
14
Реакции
2
var myDocument = app.activeDocument;

var mySwatch100 = myDocument.swatches.item("BC Blue 100");
var mySwatch70 = myDocument.swatches.item("BC Blue 70");
var mySwatch30 = myDocument.swatches.item("BC Blue 30");

var myNoneSwatch = myDocument.swatches.item("None");

mySwatch100.remove(myNoneSwatch);

дальше для mySwatch70 и mySwatch30 аналогично
 
  • Спасибо
Реакции: LeonidB

LeonidB

Их бин
Топикстартер
10 лет на форуме
Сообщения
2 470
Реакции
1 530

Попробовал так:
Код:
var myDocument = app.activeDocument;
var mySwatch100 = myDocument.swatches.item("Black for BC Blue");
var mySwatch70 = myDocument.swatches.item("Black for BC Blue 70");
var mySwatch50 = myDocument.swatches.item("Black for BC Blue 50");
var mySwatch30 = myDocument.swatches.item("Black for BC Blue 30");
var myNoneSwatch = myDocument.swatches.item("BC Blue");
mySwatch100.remove(myNoneSwatch);
mySwatch70.remove(myNoneSwatch);
mySwatch50.remove(myNoneSwatch);
mySwatch30.remove(myNoneSwatch);

В результате все оттенки цвета "Black for BC Blue" действительно удаляются, но при этом заменяются на появившиеся в документе соответствующие оттенки цвета "BC Blue", при этом вылезает окошко с ошибкой:
swatch2.jpg

Если сделать так:
Код:
var myDocument = app.activeDocument;
var mySwatch = myDocument.swatches.item("Black for BC Blue");
var myNoneSwatch = myDocument.swatches.item("BC Blue");
mySwatch.remove(myNoneSwatch);
то результат будет таким же (сохранятся оттенки), но ошибка не вылезает.

Таким образом, этот скрипт действительно работает для ситуации, когда нужно сохранить оттенки (Х % Цвета 1 ===>>> Х % Цвета 2), но вот остаётся непонятным, как заменить все оттенки Х % Цвета 1 на 100 % Цвета 2. :(
 

LeonidB

Их бин
Топикстартер
10 лет на форуме
Сообщения
2 470
Реакции
1 530
Можно поставить вопрос по-другому: как скриптом заменить все встречающиеся в документе оттенки Цвета2 на 100 % этого Цвета2?

Тогда в скрипте
Код:
var myDocument = app.activeDocument;
var mySwatch = myDocument.swatches.item("Цвет1");
var myNoneSwatch = myDocument.swatches.item("Цвет2");
mySwatch.remove(myNoneSwatch);
следующей строкой надо поставить эту замену - и задача будет решена :)
 

azz

alexey
15 лет на форуме
Сообщения
711
Реакции
359
попробуйте, если конечно я правильно вас понял, что нужно грохнуть оттенки и заменить их другим цветом
Код:
var myDocument = app.activeDocument;
var swatchLength = myDocument.swatches.length;
for (i=swatchLength-1; i >= 0; i--) {
    if (myDocument.swatches[i].name.match("RED")) {
           myDocument.swatches[i].remove("BLUE")
         }
    }
RED — что искать, BLUE — на что заменить.
 
  • Спасибо
Реакции: LeonidB

LeonidB

Их бин
Топикстартер
10 лет на форуме
Сообщения
2 470
Реакции
1 530
@azz, спасибо, скрипт работает!

А вот ещё такой дополнительный вариант той же задачи: есть места в тексте, выделенные неким процентом Цвета1 - без оформления его в виде отдельного оттенка Swatch в палитре. Они после обработки этим скриптом переводятся в Цвет2, но оттенок при этом остаётся:
swatch3a.jpg swatch3b.jpg
Можно ли и такие места тоже как-нибудь преобразовать к 100 % Цвета2?
 

LeonidB

Их бин
Топикстартер
10 лет на форуме
Сообщения
2 470
Реакции
1 530
@azz, вот такая проблема в скрипте обнаружилась: насколько я понимаю, ищется любой цвет/оттенок, в имени которого есть искомое сочетание символов. То есть вместе с Цвет1 (со всеми оттенками) удалятся и Цвет12, и Цвет199...
 

azz

alexey
15 лет на форуме
Сообщения
711
Реакции
359
@azz, вот такая проблема в скрипте обнаружилась: насколько я понимаю, ищется любой цвет/оттенок, в имени которого есть искомое сочетание символов. То есть вместе с Цвет1 (со всеми оттенками) удалятся и Цвет12, и Цвет199...
@LeonidB, решается дополнительной проверкой
Код:
var myDocument = app.activeDocument;
var swatchLength = myDocument.swatches.length;
for (i=swatchLength-1; i >= 0; i--) {
    var cn = myDocument.swatches[i].name;
    if ( (cn == "RED" && cn.match("%")) || (cn == "RED") ) {
           myDocument.swatches[i].remove("BLUE")
         }
    }
подправил чуток
 
Последнее редактирование:
  • Спасибо
Реакции: kreotiff и LeonidB

azz

alexey
15 лет на форуме
Сообщения
711
Реакции
359
@azz, спасибо, скрипт работает!
А вот ещё такой дополнительный вариант той же задачи: есть места в тексте, выделенные неким процентом Цвета1 - без оформления его в виде отдельного оттенка Swatch в палитре. Они после обработки этим скриптом переводятся в Цвет2, но оттенок при этом остаётся:
Можно ли и такие места тоже как-нибудь преобразовать к 100 % Цвета2?

это уже не к swatches вопрос, а к свойству объекта в котором tint не 100%
 

LeonidB

Их бин
Топикстартер
10 лет на форуме
Сообщения
2 470
Реакции
1 530
это уже не к swatches вопрос, а к свойству объекта в котором tint не 100%
Вот поиском/заменой я могу заменить весь "Цвет2" на "Цвет2 оттенок 100 %" по отдельности: 1) для всего текста в документе; 2) для заливки всех объектов в документе; 3) для обводки всех объектов в документе. Можно сохранить эти поисковые запросы и потом вызывать их через Find/Change. Но удобней было бы сразу в скрипт это как-нибудь вставить.
 

LeonidB

Их бин
Топикстартер
10 лет на форуме
Сообщения
2 470
Реакции
1 530
Статус
Закрыто для дальнейших ответов.