Делаем ссылки во flash-баннере, не имея исходников

    Зачем?



    Вам никогда не приходила верстка с flash-элементами, которые должны быть ссылками на внешние или внутренние ресурсы, но на деле таковыми не являющимися? При этом, когда вы не flash-разработчик и Flash IDE под рукой нет (а то и операционная система, в которой вы работаете, эту самую Flash IDE не поддерживает) — это становится небольшим затруднением. Можно, конечно, пнуть верстальщика, чтобы он все поправил, но это требует времени, а значит денег. Кроме того, пинать его каждый раз когда URL поменяется не самая лучшая идея.

    На помощь приходят swftools



    На сайте разработчика можно узнать, что это набор консольных утилит для работы с .swf файлами. Утилиты эти хорошие и разные (например, компилятор ActionScript не умеет компилировать Box2D, то есть не всякий синтаксис ActionScript понимает), но с нашей задачей они справятся.
    Утилиты, к слову говоря, умеют:
    • конвертировать в swf из pdf (PDF2SWF)
    • вытаскивать из swf-роликов контент (SWFDump, SWFStrings, SWFBBox, SWFExtract )
    • конвертировать в swf некоторые графические/аудио/видео форматы файлов (JPEG2SWF, PNG2SWF, GIF2SWF, WAV2SWF, AVI2SWF)
    • импортировать в swf-ролик шрифты TTF, Type1 (Font2SWF)
    • компилировать код ActionScript3 с определенными ограничениями


    Хорошо, а ссылки в баннерах как сделать?



    Здесь нам поможет еще одна консольная программка из набора swftools под названием swfc. Она позволяет собирать flash-ролики на основе описания их специальным языком разметки.

    Предположим, у нас есть баннер размером 980 на 136 пиксел в файле banner.swf и мы хотим, чтобы при его показе в браузере на нашем сайте он ссылался на главную страницу хабра.
    Создадим текстовый файл movie.sc со следующей разметкой:

    #название файла с роликом, его размеры и скорость воспроизведения
    .flash filename="banner_with_link.swf" bbox=980x136 fps=12
    
    #наш баннер
    .swf banner "banner.swf"
    .put banner
    
    #поверх него прозрачный прямоугольник
    .box rect width=980 height=136 color=red fill=#FFFFFF00 line=0
    
    #собираем прямоугольник в сущность "кнопка"
    .button mybutton
        .show rect as=shape
        #по клику на кнопку происходит переход по указанной ссылке
        .on_press:
            getURL('http://habrahabr.ru/', '_top');
        .end
    .end
    .put mybutton
    .end
    


    Осталось собрать из этого файла swf-ролик при помощи утилиты swfc:
    swfc movie.sc
    В итоге сборки мы получим в этой же директории файл banner_with_link.swf с нужным нам функционалом.

    И что?



    Собственно, задача выполнена, но на этом можно не останавливаться. Ведь сборка не обязательно должна происходить на вашей машине — достаточно установить эту утилитку на сервер и баннеры можно будет собирать динамически. При правильном кешировании это практически никак не скажется на производительности. В разделе References на сайте разработчика имеются примеры проектов, работающих по такой технологии. А после изучения материалов wiki документации и открытых исходных кодов проекта у вас возникнет множество других замечательных идей по его использованию. Дерзайте, и на забывайте писать об этом на хабре!
    • +11
    • 2,4k
    • 3
    Поделиться публикацией
    Комментарии 3
      –4
      По мне так ссылки проще передать в качестве параметра в sfw файлу.
        0
        Да, можно и передавать, можно и Javascript из функции getURL выполнить, это уже у кого на что фантазии хватит — выше предложен только принцип, без претензий на идеальность решения.
          0
          * swf файлу

          А за сам принцип спасибо, всегда интересовала «консольная» сборка флеш роликов

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

        Самое читаемое