114. [JSFL] Пишем jsfl-скрипт для экспорта изображений из FLA

jsfl – Написание JSFL-скриптов для управления редактором Adobe Flash, и создания скриптов для автоматизации работы.
Посмотреть все статьи: http://flashpress.ru/blog/category/jsfl/

Если вы не знакомы со скриптовым языком JSFL, советую почитать вводную статью на эту тему: Пишем первый jsfl-скрипт. Конечно область применения языка JSFL очень обширна, и хочется рассказать обо все и сразу. В этом уроке я попробую рассказать вам о том, как вытащить из библиотеки все изображения. Конечно вы можете положить картинку на stage, и выбрать пункт меню File->Export PNG, но если во FLA файле картинок будет много, экспортировать их руками – занятие не очень веселое. Есть много вариантов решения этой проблемы, например можно написать свой парсер swf-файлов(парсер ByteArray), и вытащить от туда все изображения, как это сделать я расскажу вам в одной из последующих статей в рубрике ByteArray, которая скоро будет доступна.

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

Переменная doc получит ссылку на FLA файл который будет открыт в итоге. В этом примере показано как указывать ссылку на файл в MacOS, на платформе Windows путь до файла должен выглядеть как то так:

Обратите внимание что в ссылке платформы Windows OS надо писать не C:/ как принято, а C|/.

Вы так же можете использовать уже открытый FLA файла, воспользовавшись методом:

Переменная doc получит ссылку на первый открытый FLA файл. Получив ссылку на документ(FLA-файл), вы можете получить список всех элементов в библиотеке:

Свойство doc.library ссылается на объект Library-библиотека FLA-файла. Свойство lib.items содержит массив элементов Item – это элементы библиотеки(картинки, мувики, шрифты, каталоги и т.д.).

Хочется также отметить здесь что метод trace не может принимать более одного параметра как во Flash-редакторах. Ну и для того что бы вызвать trace, надо обратится к объекту fl. Что бы не писать каждый раз fl.trace, мы можем написать свою функцию trace, и так же хорошо бы в самом начале скрипта очищать окно Output, что бы trace-ы не смешивались:

Итак мы получили items – массив всех элементов имеющихся в библиотеке. Для перебора используем обычный for по элементам массива Array:

Объект item – это элемент в библиотеке, у него есть множество интересных свойств и методов. Обратите внимание на свойство item.itemType, это свойство имеет множество значений, с списком вы можете ознакомиться в документации к свойству .itemType. Нас интересует значение bitmap т.к. мы хотим экспортировать все картинки. Обратите внимание так же на то, что свойство item.name будет содержать полное имя вместе с каталогом, т.е. если картинка с именем image.png лежит в библиотеке в каталоге с именем images, то поле item.name будет иметь значение images/image.png. Так же не забывайте что в массиве lib.items будут лежать и каталоги, с типом “folder”.

Что бы экспортировать картинку, необходимо положить её на stage, делается это методом:

Почему то Flash кладет изображения так, что центр картинки находится в точке 0×0, хотя логичнее было бы что бы левый верхний угол картинки был в точке указанной в методе addItem, ну видимо разработчики Adobe решили что так правильнее. Экспортировать мы будем все что лежит на stage, поэтому картинку необходимо подвинуть так что бы левый верхний угол картинки лежал в левом верхнем углу документа, а для этого необходимо получить ссылку на созданный элемента, получить созданный элемент можно из текущего кадра, куда кладется изображение после вызова метода doc.addItem(). Получить ссылку на текущий кадр можно так:

Получив ссылку на текущий кадр, мы можем получить ссылку на элемент который был добавлен на stage, и сместить его в левый верхний угол, задав значения x=0; y=0:

Обратите внимание что созданный элемент – это объект Element, и это не тоже самое что Item в библиотеке, это все равно что Класс и экземпляр класса в языке ActionScript, грубо говоря Item – это класс, а Element – это экземпляр.

Собрав все выше сказанное в одно целое, получим вот такой скрипт:

При экспорте, flash использует размер fla-документа, поэтому перед экспортированием необходимо задать документу размеры, равные размеру экспортируемой картинки, причем значение необходимо округлить(строки 27,28), иначе Flash его проигнорирует.

Прежде чем экспортировать изображения, нам надо понять куда складывать создаваемые файлы, например можно в каталог, где лежит сам FLA-файл. Определить каталог где лежит FLA можно с помощью свойства doc.pathURI. Это свойство показывает путь до самого FLA-файла, из этого пути мы можем извлечь путь до каталога без имени файла:

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

В итоге полный путь до создаваемого файла может получится вот такой:

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

Метод рекурсивно проходит по всем именам каталогов заданным в пути folderPath, мы не проверяем наличие каталогов заданных в пути docPath потому что в этом каталоге лежит FLA-файл, а это значит что каталог однозначно существует. Для проверки существования каталога и для создания нового, используем методы объекта FLfile.

Экспортируем изображение с помощью метода doc.exportPNG(), затем выделяем элемент задав свойству element.selected значение true, и удаляем со stage все что выделено методом doc.deleteSelection().

Вот что должно получиться в итоге:



Для более детального ознакомления с языком jsfl, предлагаю вам свой вариант скрипта exportImages.jsfl, который умеет работать с различными настройками, можно указать в настройках в какой каталог экспортировать картинки, какое имя задавать файлам(например с индексом image_1, image_2 и т.д.), можно указать шаблон имени которому определяются какие изображения необходимо экспортировать(например все изображения, в имени которых есть слово car_). Настройки экспорта должны лежать в файле exportConfig.txt в каталоге рядом с FLA файлом. При первом запуске скрипта, если файла-конфига нет – скрипт выдаст предупреждающее сообщение с преложением создать файл конфиг со значениями по умолчанию, что бы вы могли ознакомиться со всеми настройками.


Закрыть exportImages.jsfl

jsfl – Написание JSFL-скриптов для управления редактором Adobe Flash, и создания скриптов для автоматизации работы.
Посмотреть все статьи: http://flashpress.ru/blog/category/jsfl/

Да прeбудет с вами Flash.
Serious Sam
Эту статью прочитали 1668 раз

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

Присоединяйтесь к нам в социальных сетях: ВКонтакте , Twitter и Facebook
Понравилась статья? Буду благодарен если вы поделитесь ссылкой с друзьями:


Комментарии ВКонтакте:




Комментарии Facebook:




Комментарии WordPress: