- Сообщения
- 42
- Реакции
- 1
Как вызвать сохраненный цвет или градиент из файла и применить его к выделенному объекту и к группе объектов (stroke or fill)? Заранее всех благодарю.
Поясните этот моментКак вызвать сохраненный цвет или градиент из файла
Да, вопрос немного ширше. Например, я работая над одним проектом, разработал градиент, который хочу использовать для других документов после закрытия этого проекта. Как его можно сохранить, чтобы в другом проекте я мог его применить не вручную, а вызвав его через скрипт.Поясните этот момент
Пусть это будет текстовое описание. Скрипт вызвав данный градиент изменит, пусть заливку, выбранного (selected) объекта в документе.Не совсем понимаю все равно
Вы хотите текстовое описание этого градиента получить, дабы его потом в скрипте пользовать?
// Creates a new gradient in current document then
// applies the gradient to the frontmost path item
if ( app.documents.length > 0 ) {
// Create a color for both ends of the gradient
var startColor = new RGBColor();
var endColor = new RGBColor();
startColor.red = 0;
startColor.green = 100;
startColor.blue = 255;
endColor.red = 220;
endColor.green = 0;
endColor.blue = 100;
// Create a new gradient
// A new gradient always has 2 stops
var newGradient = app.activeDocument.gradients.add();
newGradient.name = "NewGradient";
newGradient.type = GradientType.LINEAR;
// Modify the first gradient stop
newGradient.gradientStops[0].rampPoint = 30;
newGradient.gradientStops[0].midPoint = 60;
newGradient.gradientStops[0].color = startColor;
// Modify the last gradient stop
newGradient.gradientStops[1].rampPoint = 80;
newGradient.gradientStops[1].color = endColor;
// construct an Illustrator.GradientColor object referring to the
// newly created gradient
var colorOfGradient = new GradientColor();
colorOfGradient.gradient = newGradient;
// get first path item, apply new gradient as its fill
var topPath = app.activeDocument.pathItems[0];
topPath.filled = true;
topPath.fillColor = colorOfGradient;
}
Ну если у него уже готов градиент, то надо объект градиента сконвертить в Json и сохранить в текстовый файл. Потом прочитать его и сделать обратную конвертацию в объект.Я вас сразу предупреждаю, что это непросто. Вот пример из доки создания нового градиента с нуля
А вам, по сути, придется брать существующий градиент и перебирать все его стопы и их цвета и выносить в некий промежуточный объект, текстовое представление которого использовать в дальнейшем
У вас есть готовый код, который это делает???объект градиента сконвертить в Json
код в json?У вас есть готовый код, который это делает???
var colourObject=app.activeDocument.gradients[i]; // это заданный градиент допустим.
var file;
file = File.saveDialog('Export');
file.open('w');
file.write(JSON.stringify(colourObject));
file.close();
var colourObject=app.activeDocument.gradients[0]; // это заданный градиент допустим.
alert(colourObject.toSource());
Точняк! я уже и забыл. Тогда самый простой способ перебрать свойства и сохранить свой json )).А я уж было обрадовался
Посмотреть вложение 120179
var colourObject=app.activeDocument.gradients[0]; // это заданный градиент допустим.
var tmp="";
for (var key in colourObject) {
tmp+=( "Ключ: " + key + " значение: " + colourObject[key] ); // вот сохранил свойства в строку в качестве примера.
}
alert (tmp);
var colorCopy = Object.entries(colourObject).slice()
Объекта, находящегося в другом документе?прямую копию объекта
Значит, какие-то объекты скопировались по референсу в итоге. Увы, в js нет метода скопировать объект целиком, дублируя референсы в локальную копию, если в нем уже есть вложенные объекты по референсу.Объекта, находящегося в другом документе?
У меня кажется было даже такое - копировал в другой документ через duplicate объект с каким то нестандартным градиентом, после чего закрытие исходного документа крэшило иллюстратор.