Помогите доработать скрипт!

Статус
Закрыто для дальнейших ответов.

MaximMK

Участник
Топикстартер
Сообщения
15
Реакции
0
Здравствуйте!
Нужна помощь специалиста в доработке старенького скрипта "Export Layers To Files.jsx" (2007 год):
http://yadi.sk/d/vr_Rug5Q3Ue2W
Этот скрипт экспортирует в указанную папку слои из документа как отдельные файлы, с именем слоя.
Например, есть документ со слоями: "Color_1", "Color_2", "Color_3". Данный скрипт экспортирует каждый из этих слоёв в отдельный документ, в указанную в настройках папку. Только делает он это не совсем так, как мне нужно.
Мне нужно, что имена созданных документов ТОЧНО соответствовали названиям слоёв. В моём примере должны получиться документы: "Color_1.jpg", "Color_2.jpg", "Color_3.jpg". А этот скрипт добавляет в начало имени свой знаки "_0000_". В результате я получаю документы: "_0000_Color_1.jpg", "_0000_Color_2.jpg", "_0000_Color_3.jpg"
Итого: нужно (в качестве помощи или на платной основе) поправить этот скрипт, чтобы он не добавлял никаких знаков, а именовал документы точно также, как названы слои.
Заранее благодарен за любую помощь :)

P.S. Также есть скрипт Layer Saver.jsx, который в части имён работает корректно, но имеет другую не приемлемую для меня проблему - он не запоминается в action. А мне нужно проигрывать данное действие в составе пакетных обработок. Поэтому Layer Saver.jsx для моих задач не годится, если только его не научить работать через action...
 

MaximMK

Участник
Топикстартер
Сообщения
15
Реакции
0
Ответ: Помогите доработать скрипт!

Также обнаружил в скрипте "Export Layers To Files.jsx" ещё одну проблему, которую хочется исправить - если сделать несколько копий скрипта для работы с составе пакетных обработок с разными каталогами - все копии обращаются к одной/последней папке сохранения. А нужно, чтобы каждая копия помнила свою папку. Например:
- копия "Export Layers To Files_ Color" должна понить папку ".../Color
- копия "Export Layers To Files_ Vintage" должна понить папку ".../Vintage
и т. д.
Буду рад, если получится исправить и эту проблему.
 

qsedftghk

фея
15 лет на форуме
Сообщения
2 032
Реакции
1 198
Ответ: Помогите доработать скрипт!

Совет: укажите версию программы, под которую Вам нужен скрипт.

Зы. Ой, не заметил, что это про шоп. Но всё же...

 

MaximMK

Участник
Топикстартер
Сообщения
15
Реакции
0
Ответ: Помогите доработать скрипт!

У меня CS6. Нужно, чтобы скрипт работал на CS5, CS6, на МАС и Win.
 

chesen

15 лет на форуме
Сообщения
553
Реакции
49
Ответ: Помогите доработать скрипт!

Могу предложить свое видение проблемы. Если надо только JPG на выходе, я использую скрипт, сохраняющий видимые слои в папку, путь к которой запоминается независимо от шопа.
Название файла соответ. названию слоя.Я на него навешиваю клавишу и получается быстро и предсказуемо.:)
Если все понятно, выложу текст скрипта.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 229
Реакции
10 851

chesen

15 лет на форуме
Сообщения
553
Реакции
49

MaximMK

Участник
Топикстартер
Сообщения
15
Реакции
0
Ответ: Помогите доработать скрипт!

...Если надо только JPG на выходе, я использую скрипт, сохраняющий видимые слои в папку, путь к которой запоминается независимо от шопа. Название файла соответ. названию слоя...
Да, JPG вполне достаточно. Только бы качеством можно было управлять. Иногда нужно сохранять при помощи этого скрипта не с максимальным качеством, а превью эффектов с качеством 5 или 6.
...Я на него навешиваю клавишу и получается быстро и предсказуемо...:)
Я действую в разных ситуациях одним из способов:
1. Навешиваю клавишу,
2. по кнопке (в панели "Actions" в режиме кнопок).
...Если все понятно, выложу текст скрипта...
Да, конечно - буду очень благодарен :)
 

chesen

15 лет на форуме
Сообщения
553
Реакции
49
Ответ: Помогите доработать скрипт!

Степень сжатия -в скрипте.
Код:
//save the layer as jpeg
var fileRef = new File ("~save_text_jpeg.ini");
fileRef.open ("r:");
var x = fileRef.read ();
var b = Folder.selectDialog ("Select a folder", x);
fileRef.open ("w:");
fileRef.write (b)
//оpen an ini file
var fileRef = new File ("~save_text_jpeg.ini");
fileRef.open ("r:");
var b = fileRef.read ();
//set up dialogmode
app.displayDialogs = DialogModes.NO;
//determine if a top layer object is a layer or a layerset
//in case of being a layerset select it's top layer as an active layer
//otherwise select a top layer object as an active layer
var y = app.activeDocument.layers [0];
//read the name content of an active layer
var x = app.activeDocument.activeLayer.name;

//save the file as jpeg
var OutputFolder = b
var jpegOptions = new JPEGSaveOptions();
jpegOptions.quality = 8;

app.activeDocument.saveAs (new File (OutputFolder + "/" + x +  ".jpg"), jpegOptions)

Я слабо владею вопросом, поэтому код примитивный.
Как-то понадобилось использовать скрипт с сохранением одного имени в одну папку, добавил подпись времени создания версии файла.
Буду рад, если кому-то пригодится. Писалось под CS2.
Код:
//save the layer as jpeg
var fileRef = new File ("~save_text_jpeg.ini");
fileRef.open ("r:");
var x = fileRef.read ();
var b = Folder.selectDialog ("Select a folder", x);
fileRef.open ("w:");
fileRef.write (b)
//оpen an ini file
var fileRef = new File ("~save_text_jpeg.ini");
fileRef.open ("r:");
var b = fileRef.read ();
//set up dialogmode
app.displayDialogs = DialogModes.NO;
//determine if a top layer object is a layer or a layerset
//in case of being a layerset select it's top layer as an active layer
//otherwise select a top layer object as an active layer
var y = app.activeDocument.layers [0];
//read the name content of an active layer
var x = app.activeDocument.activeLayer.name;
//add date time
var maDate = ""
var laDate  = new Date();
maDate += laDate.getHours()+ ".";
maDate += laDate.getMinutes()+ ".";
maDate += laDate.getSeconds()+ "_"
maDate += laDate.getDate() + ".";
maDate += (laDate.getMonth() +1);

//save the file as jpeg
var OutputFolder = b
var jpegOptions = new JPEGSaveOptions();
jpegOptions.quality = 8;
//app.activeDocument.saveAs (new File (OutputFolder + "/" + x + "_"  + "_" + Math.round(Math.random()*999)+ ".jpg"), jpegOptions)
app.activeDocument.saveAs (new File (OutputFolder + "/" + x + "_" + maDate + ".jpg"), jpegOptions)
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Ответ: Помогите доработать скрипт!

интересный какой подход

//determine if a top layer object is a layer or a layerset
//in case of being a layerset select it's top layer as an active layer
//otherwise select a top layer object as an active layer

а где код, который это делает? :)
 

chesen

15 лет на форуме
Сообщения
553
Реакции
49
Ответ: Помогите доработать скрипт!

По ошибке копи-паст.:D
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Ответ: Помогите доработать скрипт!

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

MaximMK

Участник
Топикстартер
Сообщения
15
Реакции
0
Ответ: Помогите доработать скрипт!

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

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 229
Реакции
10 851
Ответ: Помогите доработать скрипт!

Похоже на мой случай. Опять локализованная версия половину функций скриптинга не понимает... 'P:E'
Но, думаю, это зло еще не так с большой руки. В данной строке ничего особо специфического нет, обойти можно, чисто теоретически, ругаться может на new File или какую то специфическую жпеговскую опцию. Разбить эту строку на несколько и выловить ошибку.
 

MaximMK

Участник
Топикстартер
Сообщения
15
Реакции
0
Ответ: Помогите доработать скрипт!

Я не программист, но достаточно давний пользователь скриптов. И насколько понимаю суть - JavaScript кросплатформенный и не зависящий от локализации язык. Во всяком случае, заказывая скрипты, я обычно уточнял на каких версиях Photoshop скрипт должен работать. Так как Adobe постепенно расширяет возможности скриптинга от версии к версии. А то, что скрипт должен работать на МАС и Windows в любой локализации - всегда само собой разумелось.
Так как работает скрипт не на уровне интерфейса, а на уровне движка программы. Поэтому первый раз слышу, чтобы на одной локализации JavaScript работает, а на другой - нет.
Итого: подскажите, пожалуйста, опытных программистов, которым можно было бы подобные заказы на платной основе давать? У меня их есть :)
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 229
Реакции
10 851
Ответ: Помогите доработать скрипт!

На локализованных версиях скриптинг работает непредсказуемо. К примеру, лично у меня полностью не работает scriptUI (диалоги и т.д.)
Для решения конкретно этой проблемы, попробуйте для начала, заменить данную строку на
app.activeDocument.saveAs (new File ( "test.jpg"))
если ругаться не будет, то на
app.activeDocument.saveAs (new File ( "test.jpg"), jpegOptions)
Что касается заказов на платной основе - welcome нам в личку, хотя, я подозреваю, что адаптация именно под вашу версию требует серьезного взаимодействия, ибо достать такую же локализацию весьма затруднительно.
 

MaximMK

Участник
Топикстартер
Сообщения
15
Реакции
0
Ответ: Помогите доработать скрипт!

На локализованных версиях скриптинг работает непредсказуемо. К примеру, лично у меня полностью не работает scriptUI (диалоги и т.д.)
А какая у Вас версия Photoshop?
Для решения конкретно этой проблемы, попробуйте для начала, заменить данную строку на
app.activeDocument.saveAs (new File ( "test.jpg"))
если ругаться не будет, то на
app.activeDocument.saveAs (new File ( "test.jpg"), jpegOptions)
Увы, ругается на оба варианта :(
И в строке вижу знак:
скриншот_1.png
как будто код не закончен.
Что касается заказов на платной основе - welcome нам в личку,
Ок :)
хотя, я подозреваю, что адаптация именно под вашу версию требует серьезного взаимодействия, ибо достать такую же локализацию весьма затруднительно.
Вы имеете ввиду найти Photoshop CS6 русский?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 229
Реакции
10 851
Ответ: Помогите доработать скрипт!

как будто код не закончен.
Дык в конце надо точку с запятой ставить ;)

Код:
app.activeDocument.saveAs (new File ( "test.jpg"));



А какая у Вас версия Photoshop?
CS3 русская. Там разных локализаций, подозреваю, как собак нерезанных.
 

MaximMK

Участник
Топикстартер
Сообщения
15
Реакции
0
Ответ: Помогите доработать скрипт!

Дык в конце надо точку с запятой ставить ;)
Код:
app.activeDocument.saveAs (new File ( "test.jpg"));
Как написали, так я и скопировал. Я ведь не программист.
Но, увы, и точка с запятой не помогла. Выдаёт ту же ошибку:
скриншот 2.png
CS3 русская. Там разных локализаций, подозреваю, как собак нерезанных.
Из них лишь одна официальная (если Adobe уже делала для CS3 русскую локализацию).
Во всяком случае я первый раз от Вас слышу, что со скриптами могут быть проблемы из-за локализаций. У меня на русской и английской версиях скрипты работают аналогично.
P.S. В личку записку отписал.
 
Статус
Закрыто для дальнейших ответов.