Найти в Дзене

Создание скриптов в Photoshop 3.

Работа с объектами цвета, буфера обмена, фильтрами
Оглавление

Работа с объектами Color

Скрипты могут использовать тот же диапазон цветов, который доступен в пользовательском интерфейсе Photoshop.

Каждая цветовая модель имеет свой собственный набор свойств. Например, класс RGBColor содержит три свойства: красный, синий и зеленый. Чтобы задать цвет в этом классе, необходимо указать значения для каждого из этих свойств.

Класс SolidColor содержит свойство для каждой цветовой модели. Чтобы использовать этот объект, сначала создается экземпляр объекта SolidColor, а затем задаются соответствующие свойства цветовой модели. После того как цветовая модель была назначена объекту SolidColor, объект SolidColor не может быть переназначен другой цветовой модели.

В следующем примере показано, как задать цвет с помощью класса цветов CMYK.

//Определения цвета в моделе CMYK
var solidColorRef = new SolidColor()
solidColorRef.cmyk.cyan = 20
solidColorRef.cmyk.magenta = 90
solidColorRef.cmyk.yellow = 50
solidColorRef.cmyk.black = 50
//Учтановка основного цвета
foregroundColor = solidColorRef
//Установка фонового цвета
solidColorRef.cmyk.cyan = 0
solidColorRef.cmyk.magenta = 0
solidColorRef.cmyk.yellow = 0
solidColorRef.cmyk.black = 0
backgroundColor = solidColorRef

Классы цветов

-2

Использование шестнадцатеричные значения цветов.

Вы можете выразить RGB цвета в виде HEX (или шестнадцатеричной) значение. Шестнадцатеричное значение содержит три пары чисел, которые представляют красный, синий и зеленый (в этом порядке).

Объект RGBColor имеет строковое свойство hexValue.

Получение и преобразование цветов.

Следующий пример преобразуют фоновый цвет RGB в его эквивалент CMYK:

var someColor = foregroundColor.cmyk

В объектной модели cmyk или rgb это свойство объекта SolidColor как свойство объекта Application.

Сравнение цветов.

Используя команду isEqual, вы можете сравнить цвета. Следующий оператор возвращают true, если основной цвет равен фоновому цвету.

if (app.foregroundColor.isEqual(backgroundColor)) {
alert("Одинаковые цвета")
} else {
alert("Цвета разные")
}

Получение web цвета.

Чтобы преобразовать цвет в web цвет, используйте команду NearestWebColor, свойство nearestWebColor объекта SolidColor.

var webSafeColor = new RGBColor()
webSafeColor = app.foregroundColor.nearestWebColor

Работа с фильтрами.

Чтобы применить фильтр используется определенный метод. Например, для применения фильтра размытия по Гауссу используется метод applyGaussianBlur (). Все методы фильтра принадлежат объекту ArtLayer.

В следующем примере применяется фильтр размытия Гаусса к активному слою.

var docRef=activeDocument
docRef.activeLayer.applyGaussianBlur(5)

В справочнике Adobe Photoshop JavaScript Scripting Reference или в описании объектной модели методы фильтров можно найти в объекте artLayer, все они начинаются с “apply.”

Взаимодействие с буфером обмена.

Команды буфера обмена в Photoshop работают с объектами ArtLayer, Selection и Document. Команды могут использоваться для работы с объектами в пределах одного документа или для перемещения информации между документами.

Команды буфера обмена объектов ArtLayer и Selection являются:

  • copy – копировать;
  • copy merged - копирование всех видимых слоев;
  • cut – вырезать;

Команды буфера обмена объекта Document являются:

  • paste – вставить;
  • paste (intoSelection) – вставить в выделение;

Использование команд копировать, вставить.

В следующем примере копируется содержимое фонового слоя в буфер обмена, создается новый документ, а затем содержимое буфера обмена вставляется в новый документ. Скрипт предполагают, что документ уже открыт в Photoshop и что документ имеет фоновый слой.

Примечание: Если ваш скрипт создает новый документ, в который вы вставляете содержимое буфера обмена, убедитесь, что в документе используются те же единицы измерения, что и в исходном документе.

//Активный документ в переменную
var docRef = app.activeDocument
//Копирование фонового слоя
docRef.artLayers["Background"].copy()
//Создание нового документа
var newDocRef = app.documents.add(1000, 1000, 72, "New Doc")
//Вставка содержимого буфера обмена в документ
newDocRef.paste()

Использование команд копирования всех видимых слоев.

//Активный документ в переменную
var docRef = app.activeDocument
//Копирование выделения, всех видимых слоев
docRef.selection.copy(true)
//Создание нового документа
var newDocRef = app.documents.add(1000, 1000, 72, "New Doc")
//Вставка содержимого буфера обмена в документ
newDocRef.paste()

Работа с единицами измерения.

Используя свойства объекта Preferences, можно установить единицы измерения для документа.

  • Типы единиц измерения для графической линейки задаются с помощью свойства rulerUnits.
  • Типы единиц измерения для шрифтов задаются с помощью свойства typeUnits.

В интерфейсе Photoshop эти настройки находятся в меню Photoshop Preferences > Units & Ruler.

Единицы измерения.

Если единицы измерения линейки установлены в дюймах, то следующая команда создания нового документа

var docRef = app.documents.add(4, 4, 72)

создаст документ размером 4х4 дюйма, если единицы измерения установить на пиксели, то та же команда создаст документ размером 4х4 пикселя. Чтобы ваш скрипт дал ожидаемый результат, вы должны проверить и установить единицы измерения на тип, соответствующий вашему скрипту. После выполнения скрипта исходные значения настроек единиц измерения должны быть восстановлены, если они были изменены в скрипте.

Установка единиц измерения.

//Установка единиц линейки в мм
app.preferences.rulerUnits = Units.MM
//Установка единиц шрифтов в пикселях
app.preferences.typeUnits = TypeUnits.PIXELS
//Установка размера пункта/пики
app.preferences.pointSize = PointType.POSTSCRIPT

Примеры.

Первичные установки для документа.

Пример организации работы с документом в скрипте, этот пример можно использовать как шаблон для скриптов с созданием документа:

//Создание переменных для сохранения начальных настроек документа
//Единицы измерения линейки
var startRulerUnits = app.preferences.rulerUnits
//Единицы измерения для шрифтов
var startTypeUnits = app.preferences.typeUnits
//Отображать диалоги
var startDisplayDialogs = app.displayDialogs
//Изменения настроек для работы скрипта
app.preferences.rulerUnits = Units.PIXELS
app.preferences.typeUnits = TypeUnits.PIXELS
app.displayDialogs = DialogModes.NO
//Создание переменных для создания нового документа
//Ширина документа в пикселях
docWidthInPixels = 400
//Высота документа в пикселях
docHeightInPixels = 200
//Разрешение документа
resolution = 72
//Имя документа
docName = “Hello World”
//Если в приложении нет открытых документов, создать новый с заданными параметрами
if (app.documents.length == 0) {
app.documents.add(docWidthInPixels, docHeightInPixels, resolution, docName)
}
//Содержимое скрипта...
//...
//Восстановление настроек документа до выполнения скрипта
app.preferences.rulerunits = startRulerUnits
app.preferences.typeunits = startTypeUnits
app.displayDialogs = startDisplayDialogs

Использование параметров при работе с текстом.

//Создание переменной для активного документа
docRef = app.activeDocument
//Создание переменной textColor
//Создание нового объекта SolidColor красного цвета
//Присвоение объекта переменной textColor
textColor = new SolidColor
textColor.rgb.red = 255
textColor.rgb.green = 0
textColor.rgb.blue = 0
helloWorldText = "Hello, World!"
//Создание переменной newTextLayer
//Применение метода add() для создания нового слоя
//Присвоение объекта переменной newTextLayer
newTextLayer = docRef.artLayers.add()
//Применение свойства kind для класса artLayer, для получения текстоавого слоя
newTextLayer.kind = LayerKind.TEXT
//Применение свойств текстового объекта: содержимое
newTextLayer.textItem.contents = helloWorldText
//Применение свойств текстового объекта: положение
newTextLayer.textItem.position = Array(100, 150)
//Применение свойств текстового объекта: размер шрифта
newTextLayer.textItem.size = 36
//Применение свойств текстового объекта: цвет шрифта
newTextLayer.textItem.color = textColor

Применение фильтра Wave.

В этом примере применим волновой фильтр к слову Hello в нашем документе:

Установите ширину и высоту документа в пикселях, а затем растеризуйте текстовый слой.

Примечание: поскольку текст является векторной графикой и к нему не может применяться волновой фильтр, мы должны сначала преобразовать текст в растровое изображение. Растеризация преобразует математически определенные векторные изображения в пиксели.

Выберите область слоя, к которой мы хотим применить волновой фильтр.

Примените к выделению волновой фильтр.

//Изменения настроек для работ скрипта
app.preferences.rulerUnits = Units.PIXELS
app.preferences.typeUnits = TypeUnits.PIXELS
app.displayDialogs = DialogModes.NO
//Создание переменных для создания нового документа
//Ширина документа в пикселях
docWidthInPixels = 400
//Высота документа в пикселях
docHeightInPixels = 200
//Разрешение документа
resolution = 72
//Имя документа
docName = "Hello World"
//Создать новый документ с заданными параметрами
docRef=app.documents.add(docWidthInPixels, docHeightInPixels, resolution, docName)
helloWorldText = "Hello, World!"
//Создание переменной newTextLayer
//Применение метода add() для создания нового слоя
//Присвоение объекта переменной newTextLayer
newTextLayer = docRef.artLayers.add()
//Применение свойства kind для класса artLayer, для получения текстоавого слоя
newTextLayer.kind = LayerKind.TEXT
//Применение свойств текстового объекта: содержимое
newTextLayer.textItem.contents = helloWorldText
//Применение свойств текстового объекта: положение
newTextLayer.textItem.position = Array(115, 120)
//Применение свойств текстового объекта: размер шрифта
newTextLayer.textItem.size = 36
newTextLayer.rasterize(RasterizeType.TEXTCONTENTS)
//Создание массива координат для выделения
selRegion = Array(Array(0, 0),
Array(docWidthInPixels / 2, 0),
Array(docWidthInPixels / 2, docHeightInPixels),
Array(0, docHeightInPixels),
Array(0, 0))
//Создание выделения
docRef.selection.select(selRegion)
//Применение фильтра Wave
newTextLayer.applyWave(1,1,100,5,10,100,100,WaveType.SINE,UndefinedAreas.WRAPAROUND, 0)
docRef.selection.deselect()