Скриптинг

  • Автор темы Автор темы KeS))
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
Ответ: Скриптинг

.duplicate(); возвращает ссылку на объект Document, поэтому для полного контроля можете это использовать:

var dupDoc = app.activeDocument.duplicate();

---

У меня в точности так сделана циклическая обработка одного документа скриптами убивающими муар. Цель - получить один, два, или три слоя обработанных разными способами для: фотографического изображения, рисунка или текста. А поскольку в одной картинке могут быть элементы с тем или иным характером, то появлятся возможность комбинировать результаты обработки путем маскирования того или иного слоя. А чтобы их получить, я дублирую оригинальный документ, обрабатываю, храню ссылку на него, затем все повторяется, а в финале собираю все дубликаты уже через дублирование слоев между документами - в одном.
 
Ответ: Скриптинг

Во-первых через буфер обмена это убийство! Я вам предлагаю сделать проще: открываете исходный документ, скрипт его дублирует (.duplicate();) в новый документ и затем все операции проводятся над ним - кадрирование, обводка ((пример скрипта выше), сохранение в новый файл (только что), закрытие. В этой точке активным становится оригинал - повторяете цикл с новыми параметрами - и так пока параметры не кончатся.

CROP конечно хорош для описания:

1. 0; 0; b-(2c+d); h;
2. c; 0; b-(c+d); h;
3. 2c; 0; b-d; h;
4. 3c; 0; 0; h;

а теперь представим, что оригинал весит 800 мегов, как долго он будет это дублировать?

+ возникла небольшая проблемка, первый кусок делается отлично, а вот на следующий ругается и выдает ошибку что переполнен scratch disk ((((

Код:
var srcDoc = app.activeDocument;
app.preferences.rulerUnits = Units.PIXELS;
var tso = new TiffSaveOptions();

    
 var z = 59 //разрешение в cm

 var h = 30 * z 	//высота
 var b = 100 * z	//ширина	
 var c = 30.2 * z	//ширина равных кусков
 var x = 0.4 * z	//нахлест
 var d = 9 * z	//ширина последнего куска

//1 сегмент

app.activeDocument.duplicate();

bounds = new Array(0, 0, b-(2*c+d), h);
app.activeDocument.crop(bounds);
bounds = null;

var strokeColor = new SolidColor();
        strokeColor.cmyk.cyan = 0;
        strokeColor.cmyk.magenta = 0;
        strokeColor.cmyk.yellow = 0;
        strokeColor.cmyk.black = 40;
strokeWidth = 1;

var selRef = app.activeDocument.selection;
selRef.selectAll();
selRef.stroke(strokeColor, strokeWidth,
                        StrokeLocation.CENTER,
                        ColorBlendMode.NORMAL, 100, false);

app.preferences.rulerUnits = Units.CM;

function SaveAsTIFF ( saveAsName ) {
var tso = new TiffSaveOptions();
tso.embedColorProfile = false;
tso.imageCompression = TIFFEncoding.NONE;
tso.byteOrder = ByteOrder.IBM;
app.activeDocument.saveAs ( File ( saveAsName ), tso);
}
app.activeDocument.close();

//2 сегмент

app.activeDocument.duplicate();

bounds = new Array(0, 0, b -(c+d), h);
app.activeDocument.crop(bounds);
bounds = null;

var strokeColor = new SolidColor();
        strokeColor.cmyk.cyan = 0;
        strokeColor.cmyk.magenta = 0;
        strokeColor.cmyk.yellow = 0;
        strokeColor.cmyk.black = 40;
strokeWidth = 1;

var selRef = app.activeDocument.selection;
selRef.selectAll();
selRef.stroke(strokeColor, strokeWidth,
                        StrokeLocation.CENTER,
                        ColorBlendMode.NORMAL, 100, false);

app.preferences.rulerUnits = Units.CM;

function SaveAsTIFF ( saveName ) {
var tso = new TiffSaveOptions();
tso.embedColorProfile = false;
tso.imageCompression = TIFFEncoding.NONE;
tso.byteOrder = ByteOrder.IBM;
app.activeDocument.saveAs ( File ( saveName ), tso);
}
app.activeDocument.close();

Если хотите все-таки добиться задуманного - не бросайте

Бросать? вряд ли брошу! Но думаю поменять язык программирования, так как у меня нету подсказок. (((

Спасибо за подсказки и советы! с меня Виски))
 
Ответ: Скриптинг

Код:
и выдает ошибку что переполнен scratch disk ((((
хотя свободно 20 Гигов.
 
Ответ: Скриптинг

Опаньки, косячочек нашелся...
координаты неправильно указал (0,0), а должно быть (c,0)...

но теперь ругается что область пуста...

не пойму почему?
 
Ответ: Скриптинг

Копирование через буфер требует больше ресурсов чем дублирование. Примерно раза в два: массив пикселов копируется затем вставляется в новый документ созданный по Clipboard. Следовательно имеем: данные для undo, растр в буфере обмена, растр в документе в виде слоя + фоновой слой; flatten image? - ОК - еще шаг в undo. Что можно сделать? Правильно - Edit > Purge > All. Но только после. Никак не до. Дублирование это просто копирование текущего файла как есть в новый файл. Никаких анду, никаких дополнительных слоев, сведения и прочего мерзости.

Впрочем, если вам нравится через буфер обмена - можно и через буфер обмена.
 
Ответ: Скриптинг

Насчет разрешения. Чтобы превратить см в пикселы, надо сделать так:

cm * (app.activeDocument.resolution / 2.54)

То есть:

var z = app.activeDocument.resolution / 2.54;

Переменная z будет показывать разрешение в см, на которое вы затем сможете умножать ваши сантиметры чтобы получить пикселы.

И тогда не надо заводить константу типа там 59 - вдруг разрешение файлов изменится и таз вашему скрипту.
 
Ответ: Скриптинг

Насчет сохранения в файл. Кажись вы вообще не понимаете что такое function. Функция это подпрограмма, subroutine, которая _вызывается_ из основной программы или другой функции (или ее самой при рекурсии) и после исполнения возвращает (данные) код в следующий шаг после того, который вызвал эту функцию. Например:

01. команда
02. команда
03. команда
04. функция --- > выполняем функцию --- > выполняем вложенные функции ... возврат.
05. команда
06. команда
...

Точки возврата записываются в стек - при каждом вызове функции в стек попадает еще одна точка возврата, а при каждом завершении функции она выбирается из стека (забирается). Поэтому можно вызывать функции из функций пока стек не переполнится - stack overflow. Но это нам не грозит.

Я объясняю как любитель - скорее всего это по-другому все называется, но у меня нет профессиональных навыков программирования. Так что может быть вам стоит просто почитать что такое функция поискав материал в сети.

Так вот, поэтому не надо фтыкать функцию SaveAsTIFF в тело кода - ее надо вызывать из этого кода, например: SaveAsTIFF(newFileName); Поскольку в этой функции есть аргумент - имя файла под которым будет записан активный документ, вам надо его передавать либо в переменной (как выше), либо в явном виде: SaveAsTIFF("C:\Temp\fileCrop3.tif"); В любом случае для каждого куска вам нужно свое имя файла.
 
Ответ: Скриптинг

А главно я вообще не могу понять до сих пор на какие куски чего у вас там режется. Вы можете просто _перечислить_ абсолютные данные ширины каждого куска? Типа: 1 - 32 см, 2 - 45 см, 3 - 37 см, 4 - 98 см, и так далее.
 
Ответ: Скриптинг

С явой у меня такая проблема, что яву я не знаю совсем. Синтаксис, в смысле. А поскольку программировать приходится в блокноте, то есть, никакого тебе ObjectBrowser'а то каждая, #$@ка, закорючка требует проверки по референсу, в примерах или в сети. В общем вот скрипт который режет документ на куски заданной ширины. Высота кусков равна высоте документа. Ширина кусков задается в сантиметрах. Скрипт сам вычисляет абсолютные координаты для каждого куска. Вам остается только вбить свои числа. Что касается "нахлестов" - можете прямо в аргументах вызова функции корректировать данные. Тем не менее мой комент остается в силе: несмотря на множество итераций я так и не мог получить вменяемого ряда данных по обрезке и "нахлестам".

Код:
var saveRulerUnits = app.preferences.rulerUnits;
app.preferences.rulerUnits = Units.PIXELS;
app.displayDialogs = DialogModes.NO;

// ширина каждого куска в см. количество кусков может быть любым
// достаточно вписать через запятую ширину каждого нового куска
var vCrops = new Array(8, 12, 15); 


var aDoc = app.activeDocument;
var docFileName = aDoc.fullName;
var cmRes = aDoc.resolution / 2.54;

// Stroke's parameters
var strokeColor = new SolidColor();
strokeColor.cmyk.cyan = 0;
strokeColor.cmyk.magenta = 100;
strokeColor.cmyk.yellow = 100;
strokeColor.cmyk.black = 0;

// Top, Bottom, Left, Right bounds
var T = 0;
var B = aDoc.height;
var L = 0;
var R = 0;

for (var i = 0; i < vCrops.length; i++ )  {

	var dupDoc = aDoc.duplicate();
	app.activeDocument = dupDoc;
	
	// Crop
	var L = R;  // left
	var R = R + vCrops[i]; // right
	bounds = new Array(L * cmRes, T, R * cmRes, B); // left, top, right, bottom
	dupDoc.crop(bounds);

	// Stroke
	var selRef = dupDoc.selection;
	selRef.selectAll();
	selRef.stroke(strokeColor, 1, StrokeLocation.INSIDE, ColorBlendMode.NORMAL, 100, false);
	
	SaveAsTIFF (dupDoc,  appendFileName ( docFileName, "_" + i + 1 ))

}

app.preferences.rulerUnits = saveRulerUnits;

function appendFileName( inFileName , fileAppendix ) {
	var lastDot = inFileName.toString().lastIndexOf( "." );
	if ( lastDot == -1 ) {
		return inFileName + fileAppendix;
	}
	var l = inFileName.toString().length;
	var e = inFileName.toString().substr( lastDot + 1, l - lastDot );
	return inFileName.toString().substr(0, lastDot ) + fileAppendix + "." + e;
}

function SaveAsTIFF( docRef, saveAsName ) {
	var tso = new TiffSaveOptions();
	tso.embedColorProfile = false;
	tso.imageCompression = TIFFEncoding.NONE;
	tso.byteOrder = ByteOrder.IBM;
	docRef.saveAs( File( saveAsName ), tso );
	docRef.close();
}

Апендиксы к именам файлов обрезанных кусков сделаны в формате _счетчик, то есть, для первого куска "_1", для второго "_2" и так далее. Если файл был myFile.tif, то первый кусок будет записан как myFile_1.tif и тд. Записываются в ту же самую папку. Функция сохранения в файл и закрывает его сама.
 
Ответ: Скриптинг

Кажется мертвый месяц кончился, извиниюсь, что долго не было ((.


Значит так:
Четких границ деления нет, сегодня это 4, завтра 3,5, а послезавтра 3,25.
Нахлест практически всегда один и тот же.

количество сегментов всегда меняется, т.е. надо завязать скрипт на еще одной цирфе (количестве сегментов).
т.е. если можно описать крайний левый и крайний правый куски, то для серединных необходимо создать циклическую функцию.
К примеру, для пяти сегментов,

1. 0 ; 0 ; (b-(3c+d)) ; h
--------------------------
2. 1с ; 0 ; (b-(2c+d)) ; h
3. 2с ; 0 ; (b-(1c+d)) ; h
4. 3с ; 0 ; (b-(0c+d)) ; h
--------------------------
5. 4с ; 0 ; b ; h

т.е если количество кусков 5, то по пунктам 1 и 5 получается следующее: 1. 0 ; 0; (b-(s-2)*c+d) и 5. (s-1)*c ; 0; b; h

сохранять с именем файла почему-то не получалось, поэтому имею нижеследующее:

в результате вот что имею:
Код:
var saveRulerUnits = app.preferences.rulerUnits;
app.preferences.rulerUnits = Units.PIXELS;
app.displayDialogs = DialogModes.NO;    

var aDoc = app.activeDocument;
var cmRes = aDoc.resolution /2.54;

// Stroke's parameters
var strokeColor = new SolidColor ();
strokeColor.cmyk.cyan =0;
strokeColor .cmyk.magenta = 0;
strokeColor.cmyk.yellow = 0;
strokeColor.cmyk.black = 40;


 var h = 10;  //высота
 var b = 40;  //ширина 
 var c = 8.5;   //ширина равных сегментов
 var x = 1; //нахлест
 var d = 6-x; //ширина последнего сегмента - нахлест

 var j = 0;


// 1 сегмент

var dupDoc = aDoc.duplicate();
app.activeDocument = dupDoc;

bounds = new Array(0*cmRes,0*cmRes,(b-(3*c+d))*cmRes,h*cmRes); // left, top, right, bottom
dupDoc.crop(bounds);

// Stroke
var selRef = dupDoc.selection;
selRef.selectAll();
selRef.stroke(strokeColor, 1, StrokeLocation.CENTER, ColorBlendMode.NORMAL, 100, false);


var j = j+1;
SaveAsTIFF (dupDoc, ( "_" + j))


function SaveAsTIFF( docRef, saveAsName ) {
var tso = new TiffSaveOptions();
tso.embedColorProfile = false;
tso.imageCoinpression = TIFFEncoding.NONE;
tso.byteOrder = ByteOrder.IBM;
docRef.saveAs( File( saveAsName ), tso );
docRef.close();
}



//2 сегмент
var dupDoc = aDoc.duplicate();
app.activeDocument = dupDoc;

bounds = new Array(c*cmRes,0*cmRes,(b-(2*c+d))*cmRes,h*cmRes); // left, top, right, bottom
dupDoc.crop(bounds);

// Stroke
var selRef = dupDoc.selection;
selRef.selectAll();
selRef.stroke(strokeColor, 1, StrokeLocation.CENTER, ColorBlendMode.NORMAL, 100, false);


var j = j+1;
SaveAsTIFF (dupDoc, ( "_" + j))


function SaveAsTIFF( docRef, saveAsName ) {
var tso = new TiffSaveOptions();
tso.embedColorProfile = false;
tso.imageCoinpression = TIFFEncoding.NONE;
tso.byteOrder = ByteOrder.IBM;
docRef.saveAs( File( saveAsName ), tso );
docRef.close();
}

//3 сегмент
var dupDoc = aDoc.duplicate();
app.activeDocument = dupDoc;

bounds = new Array(2*c*cmRes,0*cmRes,(b-(c+d))*cmRes,h*cmRes); // left, top, right, bottom
dupDoc.crop(bounds);

// Stroke
var selRef = dupDoc.selection;
selRef.selectAll();
selRef.stroke(strokeColor, 1, StrokeLocation.CENTER, ColorBlendMode.NORMAL, 100, false);


var j = j+1;
SaveAsTIFF (dupDoc, ( "_" + j))


function SaveAsTIFF( docRef, saveAsName ) {
var tso = new TiffSaveOptions();
tso.embedColorProfile = false;
tso.imageCoinpression = TIFFEncoding.NONE;
tso.byteOrder = ByteOrder.IBM;
docRef.saveAs( File( saveAsName ), tso );
docRef.close();
}

//4 сегмент
var dupDoc = aDoc.duplicate();
app.activeDocument = dupDoc;

bounds = new Array(3*c*cmRes,0*cmRes,(b-(c*0+d))*cmRes,h*cmRes); // left, top, right, bottom
dupDoc.crop(bounds);

// Stroke
var selRef = dupDoc.selection;
selRef.selectAll();
selRef.stroke(strokeColor, 1, StrokeLocation.CENTER, ColorBlendMode.NORMAL, 100, false);


var j = j+1;
SaveAsTIFF (dupDoc, ( "_" + j))


function SaveAsTIFF( docRef, saveAsName ) {
var tso = new TiffSaveOptions();
tso.embedColorProfile = false;
tso.imageCoinpression = TIFFEncoding.NONE;
tso.byteOrder = ByteOrder.IBM;
docRef.saveAs( File( saveAsName ), tso );
docRef.close();
}

//5 сегмент
var dupDoc = aDoc.duplicate();
app.activeDocument = dupDoc;

bounds = new Array(4*c*cmRes,0,b*cmRes,h*cmRes); // left, top, right, bottom
dupDoc.crop(bounds);

// Stroke
var selRef = dupDoc.selection;
selRef.selectAll();
selRef.stroke(strokeColor, 1, StrokeLocation.CENTER, ColorBlendMode.NORMAL, 100, false);

var j = j+1;
SaveAsTIFF (dupDoc, ( "_" + j))


function SaveAsTIFF( docRef, saveAsName ) {
var tso = new TiffSaveOptions();
tso.embedColorProfile = false;
tso.imageCoinpression = TIFFEncoding.NONE;
tso.byteOrder = ByteOrder.IBM;
docRef.saveAs( File( saveAsName ), tso );
docRef.close();
}

app.preferences.rulerUnits = Units.CM;
т.е. 2-4 куски повторяются, меняются только координаты.

Кстати дома, файлики _1,_2,_3,_4,_5 сохраняются в туже папку что и файл, а вот на работке сохраняет куда-то очень
далеко: "С:\\Documents&Settings\"учетная запись"\.

возможно это связано с найстроками домена?!

PS:Zest, какое виски пьешь?
 
Ответ: Скриптинг

С явой у меня такая проблема, что яву я не знаю совсем. Синтаксис, в смысле. А поскольку программировать приходится в блокноте, то есть, никакого тебе ObjectBrowser'а то каждая, #$@ка, закорючка требует проверки по референсу, в примерах или в сети.

В чем программируешь??? Там наверняка проще и с подсказками.
Посоветуй, что лучше!!!
 
Ответ: Скриптинг

Для пяти сегментов:
0 0 (b-(3c+d)) h
1c 0 (b-(2c+d)) h
2c 0 (b-(1c+d)) h
3c 0 (b-(0c+d)) h
4c 0 b h


=>
(s-1)•с <= к последнему (b-((s-2)•c+d) <= к первому

надо ввести параметр с количеством сегментов:

k1 = s-(s-1) k3 = s-(s-2)
k1 = k1 + 1 k3 = k3-1

Крайний левый:
0 0 (b-((s-2)c+d)) h
Средние куски:
k1•с (b-(k3•c+d)
Крайний правый:
(s-1)c 0 b h


h = 10; // высота
b = 40; // ширина
c = 8.5; // ширина равных сегментов
x = 1; // нахлест
d = 6-x; // ширина последнего сегмента – нахлест

(значения даны условные)

Как мне зациклить значения для средних сегментов???
 
Статус
Закрыто для дальнейших ответов.