Скриптинг

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

KeS))

Участник
Топикстартер
Сообщения
128
Реакции
0
Скажу сразу в скриптах пока ничего не знаю... но ХОЧУ!!!

Задача:
есть файлик, который нужно порезать на несколько кусков с нахлестом друг на друга...

Итог: целиковый файл и несколько файлов (кусков)

т.е. мне необходимо описать команды crop (по заданным значениям), save и конечно если это возможно то возврат по History до исходного файла.

также интересует описание команды Stroke.

Пока планирую сделать это в jave, но хочу прокунсультироваться у вас, где и как лучше это сделать...

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

Если задача непонятна, могу предоставить jpg общего файла и jpg из кусков.

Заранее всем благодарен за помощь!!!
 
Ответ: Скриптинг

Вводить размеры неудобно, а с направляющими скриптинг не работает. Надо придумывать что-то еще.
 
Ответ: Скриптинг

не направляющие, а сразу CROP!!!

вводить данные только в проекте, пока просто скрипт, кот. редактируется...
впоследствие уже думаю сделать программку где вводятся все необходимые данные, а она генерит ява-скрипт.
 
Ответ: Скриптинг

Зачем генерить скрипт? В CS3 вполне развитые возможности по созданию интерфейсов.
Направляющие были бы удобнее — не надо вводить числа руками.
 
Ответ: Скриптинг

А проблема-то в чем?

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

kaatm сказал(а):
Вводить размеры неудобно, а с направляющими скриптинг не работает. Надо придумывать что-то еще.
Работает, через automation. Можно удалять и создавать новые "гадики" (guidelines), но нельзя получить данные об имеющихся и нельзя имеющиеся редактировать. Это в открытом документе. А в файле - можно и это. То есть, в записанном файле на диске - открываете его сами своим скриптом, находите данные по гадикам и правите. Описание psd формата есть в SDK.
 
Ответ: Скриптинг

KeS)) сказал(а):
Повторяю свой вопрос:
примеры описания команд на яве crop, canvas, save, и возможность перехода после cropa к исходному файлу!!!
Ответ: C:\Program Files\Adobe\Adobe Photoshop CS2\Scripting Guide\JavaScript Reference Guide.pdf
 
Ответ: Скриптинг

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

создавать в новом документе конечно же выход из положения, чтоб не возвращаться по "хистори", но тогда опять же новый вопрос как это описывается...

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

К примеру, как будет выглядить скрипт, кот. должен делать следующее:

есть файлик допустим 15 на 3

надо порезать его следующим образом 3,01(+0,04*)x3 - 4 шт. + 2.96x3 - 1шт (последний кусок)
+0,04* это нахлест по изображению, причем на каждый из кусков нарисовать Stroke.
 
Ответ: Скриптинг

Примеры не в пидиэфе (хотя и там кое-что появилось), а в папке рядом C:\Program Files\Adobe\Adobe Photoshop CS2\Scripting Guide\Sample Scripts

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

Например там есть образец SelectionStroke.jsx - прямо для вас. И селекция и обводка - все методы представлены. Осталось только модифицировать под свои нужды и готово.

надо порезать его следующим образом 3,01(+0,04*)x3 - 4 шт. + 2.96x3 - 1шт (последний кусок)
Ну вот видите - вы ломитесь программировать, а элементарного не хотите понять: прямоугольная область селекции описывается как минимум четырьмя координатами: X Y W H. А у вас только W H. А в каком месте документа расположены эти области - вас николебет.

Но хуже всего что в скриптинге прямоугольная область селекции описывается 8-ю координатами - по две для каждого угла. Причем в виде двумерного массива: Array(Array(X1,Y1), Array(X2,Y2), Array(X3,Y3), Array(X4,Y4));
 
Ответ: Скриптинг

Zest сказал(а):
Ну вот видите - вы ломитесь программировать;

Я же писал что ничего не понимаю в скриптах...

спасибо за подсказки и описание команды... буду пробовать...

а координаты по умолчанию идут из верхнего левого угла. ))

как получится, предоставлю файлик на обсуждение... есичо



PS: Создавать в новом документе каждую часть конечно же можно, но это увеличивает машинное время... так что если знаете как вернуться по хистори буду очень благодарен))
 
Ответ: Скриптинг

а координаты по умолчанию идут из верхнего левого угла.
Для всех кусков одни и те же координаты XY?

Я же писал что ничего не понимаю в скриптах...
А я не писал что понимаете в скриптах - я о программировании писал. Иначе откуда у вас такие глупокие понятия: "но это увеличивает машинное время"
 
Ответ: Скриптинг

Для всех кусков одни и те же координаты XY?
Да нет же... просто теперь понятно как это описывается... вроде что-то получается но не все... а координаты известны из размеров кусков... разве нет?

а про машинное время - программирование тут ни при чем... хотя кое-какие грешки есть))

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

вот и все...

к сожалению сеня пока было мало времени этим заняться, но думаю я уже где-то на полпути?!!!
 
Ответ: Скриптинг

координаты известны из размеров кусков... разве нет?
Так надо было отметить что они относительные. В общем, не важно - все равно вам их придется либо вычислять, либо вписывать в массив заранее.
 
Ответ: Скриптинг

АААААААА.... не получается (((( ... ничего не получается... ((((

подскажите какой-нить учебничек по яве-скриптам в сети?
я что-то ищу ничего найти не могу....
 
Ответ: Скриптинг

Кладите сюда что накалякали, свой скрипт, в смысле. Тогда и разберемся что у вас не получается.

Вот что получилось у меня из того примера о котором я выше говорил:

Код:
var strtRulerUnits = app.preferences.rulerUnits;
app.displayDialogs = DialogModes.NO;

app.preferences.rulerUnits = Units.PIXELS;
var selRef = app.activeDocument.selection;
var T = app.activeDocument.height;

var L = 100;
var R = 200;
var arr = Array(
	Array(L, 0), 
	Array(R, 0), 
	Array(R, T), 
	Array(L, T));
selRef.select(arr);

app.preferences.rulerUnits = strtRulerUnits;

Этот скрипт создает область селекции сверху донизу документа, шириной 100 пикселов, на расстоянии 100 пикселов от левого края. Модифицируя переменные L и R (типа Left & Right edges) вы можете перемещать эту селекцию слева направо и менять ее ширину. Как я понял высота и вертикаль у вас стоят на месте.

Селекцию можно задавать (вроде) только в пикселах, по крайней мере попытка задать в СМ не удалась - получается все равно в пикселах. Поэтому СМ в пикселы пересчитывайте сами через разрешение.
 
Ответ: Скриптинг

Вот скрипт который кадрирует и обводит то, что осталось. В отличии от двойных координат селекции тут проще - всего 4.

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

// Crop
var T = 0;   // top
var B = app.activeDocument.height; // bottom
var L = 100; // left
var R = 200; // right
bounds = new Array(L, T, R, B); // left, top, right, bottom
app.activeDocument.crop(bounds);

// Stroke parameters
var strokeColor = new SolidColor();
strokeColor.rgb.red = 200;
strokeColor.rgb.green = 50;
strokeColor.rgb.blue = 50;
strokeWidth = 2; pixels

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

app.preferences.rulerUnits = strtRulerUnits;

Аналогично: изменяя переменые L и R вы можете задавать расположение кадра относительно левого края и его ширину.

Что касается сохранения в файл. В скрипте пишете цикл, который дублирует активный документ, кадрирует, обводит и сохраняет его энное количество раз. Последний раз можно не дублировать - кадрировать прямо оригинал.
 
Ответ: Скриптинг

Выкладвать свои скрипты стыдно. Если не работает, значит что-то не так описываю!

Нет ли какого нибудь справочника по описанию команд явы с примерами для фотошопа?

ниже привожу схему для простого подсчета прямоугольной области селекции:

shema.gif


БЛАГОДАРЯ Вашим ответам смог кое-чего сделать, НО....

Привожу часть скрипта, который вырезает третий кусок из файлика 100см на 30см с разрешение 59pixels/cm; размеры равных кусков - 30,2; нахлест - 0,4; ширина последнего - 9;


Код:
var srcDoc = app.activeDocument;
app.preferences.rulerUnits = Units.PIXELS;
    
 var z = 59
//59 - разрешение файла в pixels/cm;
// если вводить сюда srcDoc.resolution,
// то выдает что нечего копировать(нет выделения)!!!!

 var h = 30 * z
 var b = 100 * z
 var c = 30.2 * z
 var x = 0.4 * z
 var d = 9 * z
  srcDoc.selection.select(Array (Array(c*2, 0),
                         Array(3*c+x, 0),
                         Array(3*c+x, h),
                         Array(2*c, h)), SelectionType.REPLACE, 0, false);
  srcDoc.selection.copy();

// пример для 3 куска файлика 100см на 30 см 59pixels/cm
// соответственно ширина - с+x(нахлест); высота - h; b - ширина общая;
// d - ширина последнего куска;
// координаты можно брать из вышеприведенной схемы.

//Необходимо чтобы документ создавался в CMYK!!!!!!!!

  var pasteDoc = app.documents.add
                 (Number(((3*c+x)-(c*2))), Number(h), srcDoc.resolution, "3");
  pasteDoc.paste();
  pasteDoc = 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;

//необходимо сохранить в TIFF без компрессии для IBM PC!!!!!!!!

//закрыть документ!!!!!!!!!

Т.е. интересует:
1. создание нового документа куда вставляются куски в CMYK;
2. Команда Flatten;
3. save to TIFF
4. закрытие документа.

конечно уже вижу что можно скрипт оптимизировать, чтобы не прописывать строки для каждого куска, но позже!
и то под большим вопросмо... Зря я наверное ломанулся в скриптинг?!!
 
Ответ: Скриптинг

Со слов провайдера - молонья $бала в роутеры и у меня три дня не было связи. А на самом деле у них там реорганизация... Так вот, в большинстве случаев команды программы и названия методов в скриптинге совпадают по ключевым словам. Например команда Flatten соответствует Photoshop.activeDocument.flatten - единственное что проверять надо большие и маленькие буквы. Я-то пишу на VB, где это по-барабану. Умнику который придумал регистрочуйствительный компилятор надо бы барабан в задницу затолкать.

Чтобы сохранить документ в новом файле надо использовать метод SaveAs (или saveAs) среди аргументов которого - структурная переменная с настройками параметров сохранения. Типа TiffSaveOptions. Создаёте переменную этого типа:

Код:
var tso = new TiffSaveOptions();

И определяете все необходимые параметры. Чтобы было удобнее пользоваться, код "заворачиваете" в функцию:

Код:
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(); У этого метода есть параметры - посмотрите в референсе. И вообще, там ведь все что вам нужно описано. В чем проблема-то прочесть? Смотрите описание свойств и методов объекта Document. В частности - методов.
 
Ответ: Скриптинг

//Необходимо чтобы документ создавался в CMYK!!!!!!!!

var pasteDoc = app.documents.add
(Number(((3*c+x)-(c*2))), Number(h), srcDoc.resolution, "3");
pasteDoc.paste();
pasteDoc = null;
Во-первых через буфер обмена это убийство! Я вам предлагаю сделать проще: открываете исходный документ, скрипт его дублирует (.duplicate();) в новый документ и затем все операции проводятся над ним - кадрирование, обводка ((пример скрипта выше), сохранение в новый файл (только что), закрытие. В этой точке активным становится оригинал - повторяете цикл с новыми параметрами - и так пока параметры не кончатся.

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

Код:
add ([width] [, height] [, resolution] [, name] [, mode] [, initialFill] [pixelAspectRatio]);

где вместо [mode] вписываете NewDocumentMode.CMYK

Если хотите все-таки добиться задуманного - не бросайте. Ваша задача включает в себя кучу разнообразных приемов программирования, которые вы освоив сможете применять вновь и вновь. Например сначала вам нужно организовать цикл выбирающий из заранее забитого массива данные координат для каждого кадра.

selRef.stroke(strokeColor, strokeWidth, StrokeLocation.CENTER,
Почему CENTER? У вас обводка в 1 пиксел по центру - это значит останется 0.5 пиксела. Или так задумано?
 
Статус
Закрыто для дальнейших ответов.