Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нем неправильно. Необходимо обновить браузер или попробовать использовать другой.
Люди умные, подскажите пожалуйста! Как с помощью джаваскрипта, выделить все объекты в макете, окрашенные более чем в 3 cmyk компоненты? Т.е. например 50/30/0/20 не выделять, а 50/30/10/20 выделить.
Заранее спасибо!
Вопрос не так прост как кажется
К бОльшей части типов объектов и их цвету доступа из яваскриптинга нет вообще от слова совсем
Или вам только однородные шейпы надо независимо от группировки?
Вопрос не так прост как кажется
К бОльшей части типов объектов и их цвету доступа из яваскриптинга нет вообще от слова совсем
Или вам только однородные шейпы надо независимо от группировки?
Спасибо, очень ценное замечание. Я подозревал что подвох будет
Да, градиенты можно игнорировать, достаточно однородных заливок. А вот с группировкой сложнее. Хотелось бы и внутри групп и снаружи групп и даже сбоку от групп. Как например вот тут: это группа
А это она же, но разгруппированная
Внезапно, откуда-то взялся черный овал. Питстоп вот его вынюхал, а я, пока не разобрал все - таки не смог найти. Вот в идеале хотелось бы и такое найти. Но если нет - хочется узнать что найти возможно технически.
Всем привет. Выкладываю свой скрипт "RECOLOR ENGINE v2", написанный год назад. Автоматическое перекрашивание CMYK -> CMY в AI. Сразу оговорюсь - работает только с заливками (FillColor), т.е. не работает с обводками - надо дописывать. Я разбивал все обводки и запускал скрипт. В архиве 5...
Не по теме: Я так стал далек от всего этого... Послушайте, фиг с ним, со скриптингом, а если там подключить в мозг SdК, СИ какое-нибудь, есть смыл заморачиваться? Или такое же уныние? Такие же мучения?. off вопрос. /OFF]
Доступа то больше, но реализовано просто чудовищно заднепроходно, вдобавок, работает чертовски неустойчиво и поддержка каждой новой версии требует фактически заново переписывать весь код. Именно поэтому я лет пять назад отказался от использования SDK вообще
Если там прозрачности, то задача практически нерешаема. Проще всё растрировать и проверить скриптом попиксельно с рисованием карты выходов за охват (что-то вроде gamut warning) в программах, которые это позволяют: шоп, корел фотопеинт.
Доступа то больше, но реализовано просто чудовищно заднепроходно, вдобавок, работает чертовски неустойчиво и поддержка каждой новой версии требует фактически заново переписывать весь код. Именно поэтому я лет пять назад отказался от использования SDK вообще
не знаю, единственный плагин что написал когда-то давно до сих пор работает. без перекомпиляции с новым SDK. а так спорить не буду, выглядит все довольно сложно. может я отупел, правда
Не по теме: Скриптографер, похоронили при переходе с cs5 на cs6, потому что адобовцы, вроде, сами заново переписали весь код иллюстратора в новом фреймворке ради выпуска версии под х64.
И там действительно всем пришлось переписывать свои плагины. В том числе долго не было новой версии кад-тулз... По моему так.
Именно так, там кардинально сменили API, я после адаптации зарекся это делать следующий раз. Насколько я помню, при переходе на CC они снова выкинули подобный финт, а после я и следить перестал. Скриптинг таки устойчивее к смене версий.
Не по теме: Скриптографер, похоронили при переходе с cs5 на cs6, потому что адобовцы, вроде, сами заново переписали весь код иллюстратора в новом фреймворке ради выпуска версии под х64.
И там действительно всем пришлось переписывать свои плагины. В том числе долго не было новой версии кад-тулз... По моему так.
Отвечу-ка я сам себе, вдруг кому понадобится. Скрипт из топика был написан, хоть и несколько с другим критерием. Рабочая задача - отлавливать штрих-коды в 4 краски (чтобы потом не было мучительно больно перегравировывать валы). По критерию из скрипта работает префлай серверного питстопа, а скрипт нужен, чтобы было понятно, ГДЕ именно собака порылась.
Код:
#target illustrator
var pi = app.activeDocument.pathItems; //все геометрические объекты
var arr2 = []; //массив для объектов
if (pi.length > 0) { //если объектов чуть более чем нифига
for (var i = 0; i < pi.length; i++) { //запускаем цикл
var fill = pi[i].fillColor; //заодно вводим переменные для заливки
var stroke = pi[i].strokeColor; //и обводки
// объявляем условие для исключения. объекты с цветом равным критерию ниже - не будут выделены
if (
(fill.black == 100 &&
fill.magenta == 50.1 &&
fill.cyan == 50.1 &&
fill.yellow == 50.1)
||
(stroke.black == 100 &&
stroke.magenta == 50.1 &&
stroke.cyan == 50.1 &&
stroke.yellow == 50.1)
)
{
continue;
}
// основная проверка. тут проверяется диапазон значений цвета. если оно true - объекты будут выделены
if (
(fill.black >= 70 &&
fill.black <= 100 &&
fill.magenta >=1 &&
fill.magenta <=100 &&
fill.cyan >=1 &&
fill.cyan <=100 &&
fill.yellow >=1 &&
fill.yellow <=100) ||
(stroke.black >= 70 &&
stroke.black <= 100 &&
stroke.magenta >=1 &&
stroke.magenta <=100 &&
stroke.cyan >=1 &&
stroke.cyan <=100 &&
stroke.yellow >=1 &&
stroke.yellow <=100)
){
arr2 [arr2.length] = pi[i]; //всё что соответствует критерию выше - добавляется в массив для последующего выделения
}
}
}
// этот блок является аналогом верхнего блока, но вместо pathItems работает с textFrames. его расписывать мне лень, тут все тоже самое.
var doc = app.activeDocument;
var tfs = doc.textFrames;
var arr = []
for (var i=0; i < tfs.length; i++) {
var tfill = tfs[i].textRange.fillColor;
var tstroke = tfs[i].textRange.strokeColor;
if (
(tfill.black == 100 &&
tfill.magenta == 50.1 &&
tfill.cyan == 50.1 &&
tfill.yellow == 50.1)
||
(tstroke.black == 100 &&
tstroke.magenta == 50.1 &&
tstroke.cyan == 50.1 &&
tstroke.yellow == 50.1)
)
{
continue;
}
if (
(tfill.black >= 70 &&
tfill.black <= 100 &&
tfill.magenta >=1 &&
tfill.magenta <=100 &&
tfill.cyan >=1 &&
tfill.cyan <=100 &&
tfill.yellow >=1 &&
tfill.yellow <=100) ||
(tstroke.black >= 70 &&
tstroke.black <= 100 &&
tstroke.magenta >=1 &&
tstroke.magenta <=100 &&
tstroke.cyan >=1 &&
tstroke.cyan <=100 &&
tstroke.yellow >=1 &&
tstroke.yellow <=100)
){
arr [arr.length] = tfs[i];
}
}
var arrsum = [].concat(arr,arr2) //объединяем массивы из проверки геометрии и проверки текста
activeDocument.selection = arrsum //выделяем все объекты найденные с помощью всего скрипта
Код скорее всего являет собой эталонный быдлокод, и является фактически первым опытом в программировании. Но он работает. Если вдруг кто конструктивно посоветует как сделать его менее быдлокодом - буду рад.
P.S. Делалось в ESTK, впечатления о котором остались такие себе.
Спасибо, учту! Я на самом деле засунул первое попавшееся что нагуглил, и в продакшн Пока подожду, накидают ещё файла, на котором скрипт не отработал, там уже и оптимизация может случится.
P.S. Меня на самом деле чуть более интересовало, как технически реализовать критерии для обоих блоков скрипта в одном месте. А то они дублируются, и как-то по моему не очень красиво это.
Во первых, все условия по хорошему надо брать в скобки ибо например в си такой код не скомпилился бы вообще а за яваскрипт я не поручусь что порядок действий правильный будет.
Во вторых, строгое сравнение myvar==90.1 может вовсе не отработать если будет, скажем 90.1001 а учитывая характер предстваления чисел с плавающей точкой в иллюстраторе и яваскрипте в частности вы рискуете вообще никогда не добиться строгого равенства даже если в лоб присвоите переменной 90.1
Параметры с плавающей точкой надо всегда сравнивать с заданной степенью точности
На данном сайте используются cookie-файлы, чтобы персонализировать контент и сохранить Ваш вход в систему, если Вы зарегистрируетесь.
Продолжая использовать этот сайт, Вы соглашаетесь на использование наших cookie-файлов.