скриптинг Open As

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

setnull

Участник
Топикстартер
Сообщения
19
Реакции
0
Всем отличного настроения!!!

Подскажите, как в скриптах открыть файл с любым расширением, в формате, скажем, *.jpeg (Открыть как)?

Если обратиться к ScriptingListenerJS.log, там генерируется код как для обыкновенного открытия файла...

var id1 = charIDToTypeID( "Opn " );
var desc1 = new ActionDescriptor();
var id2 = charIDToTypeID( "null" );
desc1.putPath( id2, new File( "C:\\1.rjpg" ) );
executeAction( id1, desc1, DialogModes.NO );

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

Спасибо!
 
Ответ: скриптинг Open As

А файл именно с таким расширением - rjpg?
У вас там не опечатка ли?
 
Ответ: скриптинг Open As

Да нет, мне нужно было нечто иное...
И *.rjpg - совсем не опечатка...

В том то и дело, что теоретически(а у мя и практически) у файла может быть любое расширение, и в этом случае PS его просто так не откроет... Но если Вы знаете, что содержимое этого файла, скажем PNG, то уже приведенный код нужно дополнить следующим образом

int id4 = ps_app.CharIDToTypeID("Opn ");
int id77 = ps_app.CharIDToTypeID("As ");
int id78 = ps_app.CharIDToTypeID("PNG");
ps.ActionDescriptor descAs = new ps.ActionDescriptor();

ps.ActionDescriptor desc2 = new ps.ActionDescriptor();
int id5 = ps_app.CharIDToTypeID("null");
desc2.PutPath(id5, "C:\\1.zzz" );
desc2.PutObject(id77, id78, descAs);
ps_app.ExecuteAction(id4, desc2, ps.PsDialogModes.psDisplayNoDialogs);
 
Ответ: скриптинг Open As

В скриптинге ФШ только для файлов RAW и EPS предусмотрена стуктура данных для открытия файлов.

Логично предположить что когда вы открываете файл "as", то программа вызывает соответвующий указанному в списке типу файла - парсер и пытается открыть. Когда вы просто открываете файл, то парсер вызывается согласно расширению файла.

Следовательно все что вам нужно сделать - заставить программу думать что она открывает PNG в то время как вы ей суете rjpg. Сделать это можно совершенно дубовым способом: скопиировать файл перед открытием изменив его расширение. То есть копируете rjpg во временную папку изменяя его расширение на png и затем открываете его из временной папки учитывая этот факт в дальнейшем.
 
Ответ: скриптинг Open As

Еще более дубовый способ - добавить нужное расширение перед открытием файла. Скажем был файл golaya_baba.rjpg, вы берете и переименовывете его в golaya_baba.rjpg.png и открываете. После чего переименовываете обратно.
 
Ответ: скриптинг Open As

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

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

Параметры описываются в переменной класса JPEGSaveOptions

Типа так:

var j = new JPEGSaveOptions();

затем перечисляете нужные параметры сохранения, например:

j.quality = 10; // качество 10
j.embedColorProfile = false; // не сохранять профиль

и в строке сохранения добавляете эту переменную в качестве второго аргумента, место которого у вас щас пустует:

app.activeDocument.saveAs( File, j );

Стукрура описана в референсе.

--

То есть на все файлы которые имеют опции сохранения - не только жопег - в скриптинге предусмотрены соответствующие классы (или структуры оформленные в классы). Есть и для тиф и для псд - название начинается с расширения файла.
 
Ответ: скриптинг Open As

Вроде все так и пишу.
Но окно выскакивает.
Вот мой убогий скрипт:
Код:
var docRef = app.activeDocument;
					var docName = docRef.name; 					
					docRef.changeMode(ChangeMode.RGB);
														
                    saveOptions = new JPEGSaveOptions();
					var j = new JPEGSaveOptions();
					j.quality = 8;
                    j.embedColorProfile = false;
					app.activeDocument.saveAs (new  File, j);
		            docRef.close(SaveOptions.SAVECHANGES,);
 
Ответ: скриптинг Open As

docRef.close(SaveOptions.SAVECHANGES,);

Напенис козе баян выделенный жирным? В уже сохранили - и сохраняете вновь но теперь уже без тех самых опций. Вот оно и выскакивает. Поставьте DONOTSAVECHANGES. И уберите запятую в конце.

Скрипт это не апликуха, где, если вы сохранили изменения то команда "Закрыть" не задает вопросов потому что флаг "dirty' сброшен. Тут все проще - есть инструкция сохранять изменения - сохраняет. Нету - не сохраняет.
 
Ответ: скриптинг Open As

Убедительно.Согласен.Каюсь.
Спасибо!!!
 
Ответ: скриптинг Open As

Скрипт работает, но вместо перезаписи старого файла сохраняет временный в "Моих документах."
Какой-то аргумент отсутствует.
 
Ответ: скриптинг Open As

А, я-то думал вы шифруетесь, типа не хотите показывать название переменной my_favorite_xxx_porn и заменили его на шаблон "new File":

app.activeDocument.saveAs (new File

Однажды я учил жену работе на компе. В частности работе с файлами. Создал файл и затолкал его куда-то глубоко файловой системе в задницу. И дал жене задание - используя поиск найти файл по известной ей части имени. Ушел на работу. Пришел. Нашла? Да? Покажи как: нажимает кнопку Пуск и затем Недавние документы - и там оно, конечно же, фигурирует. :)

Вот и у вас - скрипт сохранял обработанный файл но требовал объяснений параметров. Объяснили, теперь оказывается скрипт вообще даже и имени файла-то не знал! А как сохранял? Ну через связанный с документом объект в методе close с параметром SAVECHANGES - все работало, но выкидывало диалог. Могучая ява, ничего не скажешь.

В общем, вам же нужно показать команде Save As - какое-то НОВОЕ имя файла. Это же не просто Save, это Save As. А у вас в том месте где должно стоять имя файла (в данном случае объектная переменная File) - мило торчит new File. Программа и сохраняет док в папку по умолчанию. А имя берет, видимо, из имени документа.

Вот так надо:

Код:
jpgFile = new File(docRef.fullName);
docRef.saveAs(jpgFile, j, false, Extension.LOWERCASE);
 
Ответ: скриптинг Open As

А просто метод .save(); - вы пробовали?
 
Ответ: скриптинг Open As

Спасибо за концовку скрипта.Все пучком.
ЗЫ: нелегко грызть гранит компьютерной науки вашей супруге...Вот и ищет обходные пути:-)
 
Ответ: скриптинг Open As

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

Что касается вашей проблемы. Вы не усекли объектной иерархии и придумали свою. В документации и в примерх скриптов много комментариев по которым легко разбираться.

Например, у нас есть документ. Это объект. Вам нужно установить связь с этим объектом. Скажем если вы хотите установить связь с субъектом, то как поступаете? Окликните, позвоните, похлопаете по плечу - так и с объектом: нужна связь. В качестве такой связи выступает ссылка та самая объектная переменная которой вы указываете с чем связаться в инструкции:

var docRef = app.ActiveDocument;

Почему docRef? Это произвольное имя но смысл таков document reference. То есть документальная связь, или связь с документом.

Установив связь вы получаете доступ к свойствам и методам объекта документ. Одним из методов является метод Save As - сохранить документ в новом месте (с новым именем). Это новое имя вы должны указать. Если вам не нужно новое имя и новое место, то вы указываете тоже самое имя и тоже самое место и в результате документ записывается в тот же самый файл. То, что не срабатывает метод Save - частный случай записи в формат JPEG, который требует инструкций для сжатия. А то, что вам требуется для этого создать объектную переменную типа File - особенности явы. На басике вы просто указывает ИМЯ ФАЙЛА в этом месте и никаких проблем.
 
Ответ: скриптинг Open As

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

Доброго времени суток!
У меня вопрос относительно подробностей в строке
docRef.saveAs(jpgFile, j, false, Extension.LOWERCASE)
В документации (традиционно-лаконичной, до маразма) сей момент описан так:
saveAs
(saveIn
[, options]
[, asCopy]
[, extensionType])

jpgFile - имя файла, или все-таки "куда сохранять"? В нашем случае - в тотже каталог.
j - JPEGSaveOptions со всеми значениями
false - не сохранять
Extension.LOWERCASE - форматирование расширения файла? Как ни менял, результат - ноль.

Но особенно огорчил меня скрипт открытия файла. 5 строк! А сколько функций задействовано, подумать страшно. Как-нить попроще стандартный PSD открывать можно?
 
Ответ: скриптинг Open As

Вы сами подумайте, метод называется - saveAs. Следовательно метод ждет информации об AS. То есть куда сохранять себя и под каким именем. Если бы вы применили метод Save - без вопросов - он сохранил бы себя туда же, откуда взялся. А метод saveAs не может сам знать куда вы хотите сохранить документ. Ему надо указать особо. Поэтому имеется аргумент saveIn который передается переменной jpegFile.

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

Так вот, jpegFile это фактически полный адрес файла (full-qualified file name). Если вы хотите записать КАК но под тем же самым именем и туда-же - то просто передайте методу saveAs fullName документа: docRef.saveAs(docRef.fullName...

JPEGSaveOptions - параметры формата графического файла. Тоже самое что вы делаете задавая их в диалоге JPEG Options, или как он там называется в ФШ.

false (true) - это аргумент asCopy. Вы знаете что в ФШ есть команда меню Save As Copy... - вот это ее программный аналог.

Extension.LOWERCASE (UPPERCASE - расширение _маленькими_ или БОЛЬШИМИ буквами. Например: myfile.JPG. Важная весчь для интернета, где царят апачи и прочие юникс-индейцы тупо интерпрентирующие имена файлов по ASCII коду, то есть по бинарному значению символа. А оно для "а" и "А" - разное. Вы на веб сайте укажете ссылку на myfile.jpg, а на сервер закачаете myfile.JPG - и никто не открет этот файл.
 
Статус
Закрыто для дальнейших ответов.