[PS CS3 и ранее] как получить прозрачность нужной точки

  • Автор темы Автор темы bossrus
  • Дата начала Дата начала

bossrus

шибка умный, аднака
Топикстартер
12 лет на форуме
Сообщения
447
Реакции
74

Не по теме:
раз уж меня разбанили, получайте: :)
и да простит меня indesign, но речь пойдёт о photoshop


встала необходимость в скрипте, который определяет цвет нужных точек в документе. самостоятельные поиски привели меня к
Код:
activeDocument.colorSamplers.add([0,0]);
alert(activeDocument.colorSamplers[0].color.cmyk.cyan+","
 +activeDocument.colorSamplers[0].color.cmyk.magenta);
...
и всё бы было ничего, но! если область, куда тыркается самплер пустая (стоит прозрачность), то шоп радостно генерит ошибку.
конечно, я, как большой извращенец, сразу подумал об
Код:
try {} catch {}
но таки остатки благоразумия подсказывают мне, что использование "трая" — это не кошерно и противоречит религиозным догматам неплохокодера.

так вот таки вопрос — как определить, что в данной точке прозрачность без использования столь простого, заманчивого и, почти во всех смыслах, столь офигенного "трая"?
 
Последнее редактирование:
Для начала определиться - а что собственно должен показывать пикер в полупрозрачной точке?
 
Для начала определиться - а что собственно должен показывать пикер в полупрозрачной точке?
не-не-не. использование пикера вовсе не обязательно. это просто лирическое вступление.
задача стоит именно определить наличие прозрачности именно в конкретной точке.

ну или сделать какую-то проверку на отсутствие цвета в пикере (точка пикера же таки создаётся).

а вообще значение пикера в прозрачной точке могло бы быть "none" или "undefined", например. а не ошибка с остановкой скрипта сразу как только появляется
Код:
activeDocument.colorSamplers[0].color
 
Последнее редактирование:
наличие прозрачности именно в конкретной точке
Зачем? Прозрачность разная бывает: текущего слоя, вообще отсутствие бэкграунда в данном месте?
Если определить конечную цель всего действия - это само собой будет ответом на топиковый вопрос
 
Зачем? Прозрачность разная бывает: текущего слоя, вообще отсутствие бэкграунда в данном месте?
ещё раз — определить в нужной точке есть прозрачность или нет. как приоритет. ну или если такого инструмента нет — то определить есть цвет или нет. в момент пикера слой включен всегда только один текущий. так что влияние других слоёв игнорируется.

если интересно, и это как-то поможет, то конечная цель этого всего такая: нужно выполнить проверку, и если в точке прозрачность, или 0 по всем цветам, то туда нужно ткнуть волшебной палочкой. если нет прозрачности и не ноль — запомнить это место как не отвечающее требованиям


Не по теме:
Если определить конечную цель всего действия - это само собой будет ответом на топиковый вопрос
определил конечную цель. ответом определение не стало :))

 
если интересно, и это как-то поможет, то конечная цель этого всего такая: нужно выполнить проверку, и если в точке прозрачность, или 0 по всем цветам
Тогда, самый простой из всех способов - выделить пиксел и построить по нему хистограмму
 
а что гистограмма даст?
 
если в точке прозрачность, или 0 по всем цветам, то туда нужно ткнуть волшебной палочкой

а например load selection -> layer transparency не пойдет? из скрипта по пикселям проходить - гиблое дело, очень долго
 
Последнее редактирование:
а код покажете? а то я как-то вообще не понял '))')
histogram array of 256
numbers (long)
Read-only. A histogram showing the number
of pixels at each color intensity level for the
composite channel.
а что гистограмма даст?
Ну по идее в такой хистограмме все элементы массива должны быть нулевые. Но это не точно, пробоовать надо
 
histogram array of 256
numbers (long)
вот как-то совсем легче не стало.
единственные 2 случая histogram, которые я нашёл в гайде относятся ко всему документу, либо к каналу. а вот чтобы к выделению — так таки нет.
или я просто не понял как это применять.
 
не, прозрачные как будто 255 считаются
 
вот как-то совсем легче не стало.
единственные 2 случая histogram, которые я нашёл в гайде относятся ко всему документу, либо к каналу. а вот чтобы к выделению — так таки нет.
или я просто не понял как это применять.

когда есть выделение - берется гистограмма выделенного
 
в общем, не вижу смысла в вышеописанных действиях. намного лучше load selection -> transparency, а потом grow
 
да не возможно, а так и есть

вот гистограмма прозрачного слоя
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40768
 
в общем, не вижу смысла в вышеописанных действиях. намного лучше load selection -> transparency, а потом grow
так мне нужно не выделить слой по прозрачности, а узнать конкретная точка белая, прозрачная или (не белая и не прозрачная).
вот гистограмма прозрачного слоя
а код можно как вы это получили?