Что такое код swf_shapelineto

Содержание

Что такое код swf_shapelineto

Самая актуальная документация по Visual Studio 2020: Документация по Visual Studio 2020.

Элементы управления Line и Shape пакетов Visual Basic Power Packs представляют собой набор из трех графических элементов управления, позволяющих по время разработки рисовать линии, овалы и прямоугольники в формах и контейнерах. Элемент управления LineShape используется для рисования горизонтальных, вертикальных и диагональных линий. Элемент управления OvalShape используется для рисования кругов и овалов, а элемент управления RectangleShape используется для изображения прямоугольников и квадратов.

Элементы управления Line и Shape инкапсулируют множество графических методов, содержащихся в пространстве имен System.Drawing. Это позволяет рисовать линии и фигуры одним действием без необходимости создавать графические объекты, перья и кисти. Можно реализовывать сложные графические методы, такие как градиентные заливки, просто задав несколько свойств.

Хотя также возможно рисовать линии и фигуры при помощи графических методов, есть несколько преимуществ использования элементов управления Line и Shape:

Графические методы можно вызвать только во время выполнения. Элементы управления Line и Shape можно добавить в форму во время разработки. Это позволяет оценить внешний вид и расположение точнее, чем при добавлении во время выполнения.

Элементы управления Line и Shape доступны вовремя выполнения, предоставляя такие события, как Click и OnDoubleClick. Выводы графических методов не выбираются и предоставляют события.

Элементы управления Line и Shape предоставляют методы BringToFront и SendToBack, позволяющие контролировать их z-порядок во время разработки и выполнения. z-порядок графических методов можно контролировать только изменяя порядок их выполнения во время выполнения.

Элементы управления Line и Shape являются элементами управления без окна; у них нет обработчиков окон и, следовательно, они не могут использовать системные ресурсы.

Объектная модель

Элементы управления Line и Shape наследуют от базового класса Shape, который определяет их общие свойства, методы и события.

Следующая картинка иллюстрирует наследование иерархию объектов Line и Shape.

Иерархия объектов Line и Shape

Наследуемый класс LineShape содержит свойства, методы и события, которые являются уникальными для линий. Наследуемый класс SimpleShape является базовым для OvalShape и RectangleShape; он содержит свойства, методы и события, общие для всех форм. Также можно наследовать от SimpleShape, чтобы создать свои собственные элементы управления Shape .

Классы OvalShape и RectangleShape можно использовать для рисования кругов, овалов, прямоугольников и квадратов с закругленными углами.

При добавлении элемента управления Line или Shape в форму или контейнер, создается невидимый объект ShapeContainer. Он ShapeContainer действует как поверхность конструирования для фигур в каждом контейнерном элементе управления; каждый объект ShapeContainer имеет соответствующий объект ShapeCollection, позволяющий выполнять итерацию элементов управления «Линия» и «Фигура». Можно переместить фигуры из одного контейнера в другой при помощи вырезания и вставки или при помощи перетаскивания. После удалении последней формы из контейнера контейнер ShapeContainer тоже удаляется.

Не все элементы управления контейнера поддерживают элементы управления Line и Shape. Нельзя разместить элементы управления Line или Shape в панели TableLayoutPanel или в панели FlowLayoutPanel.

CSS Shapes

Прямоугольники внутри прямоугольников: это то, из чего состоят веб-страницы. Мы долго пытались вырваться из этих ограничений с помощью CSS для создания геометрических фигур, но форма этих фигур никогда не влияла на форму укладки контента внутри элемента, или на то, как элемент соотносится с другими элементами страницы.

Новая спецификация CSS Shapes меняет такое положение вещей. Представленная в середине 2012 года компанией Adobe , она имеет своей целью предоставить веб-дизайнерам новые возможности размещения контента, который теперь может обтекать сложные геометрические фигуры, как изнутри, так и снаружи — чего мы раньше не могли сделать даже с помощью JavaScript .

Например, обратите внимание, как текст обтекает круглое изображение в этом макете. Без Shapes , текст был бы просто прямоугольным блоком — возможность взаимодействия со сложными фигурами действительно открывает перед дизайнерами новые горизонты:

Давайте рассмотрим, как работает Shapes , и как вы можете начать его использовать.

Поддержка браузерами

В настоящее время CSS Shapes поддерживается только в Webkit Nightly и Chrome Canary , но его Модульный уровень 1 получил статус « рекомендовано к рассмотрению », то есть свойства и синтаксис, определенные в спецификации, вполне стабильны.

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

В частности, здесь определено свойство shape-outside и связанные с ним другие свойства. В сочетании с другими новейшими функциями, такими как Обрезка и наложение , CSS-фильтры , и Компоновка и взаимодействие , CSS Shapes позволят нам создать более сложные конструкции, не прибегая при этом к помощи графических редакторов, таких как Photoshop или InDesign .

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

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

Когда же будут реализованы свойства CSS Shapes shape-inside , мы сможем сделать блок самого контента также ромбическим, и такие макеты, как тот, что приведен ниже, станут вполне возможны:

Сегодня для того чтобы использовать CSS Shapes в Chrome Canary , вы должны с помощью специальной опции разрешить использование экспериментальных функций. Если вы не уверены, как это делается, посмотрите эту пошаговую инструкцию в блоге Adobe .

Создание CSS Shape

Вы можете применить форму к элементу с помощью одного из свойств Shapes. Вы передаете свойство фигуры в функцию Shapes в качестве значения. Функция фигуры, это то куда вы передаете аргументы, определяющие фигуру, которую вы хотите применить к элементу:

Фигуры могут быть созданы с помощью одной из следующих функций:

Каждая фигура определяется набором точек. Некоторые функции принимают точки в качестве параметров; другие принимают смещения — но все они в конечном итоге рисуют фигуры в виде набора точек. Мы рассмотрим параметры для каждой из этих функций в приведенных ниже примерах.

Фигура также может быть определена путем ее извлечения из изображения с помощью альфа-канала. Когда изображение передается в свойства фигуры, браузер извлекает фигуру из картинки, используя shape-image-threshold . Форма определяется пикселями, чьи альфа-значения больше, чем пороговое значение.

Изображение должно быть совместимо с CORS . Если предоставляемое изображение по какой-либо причине не может быть отображено (например, если оно не существует), то не будет применяться ни одна из фигур.

Список свойств фигуры, которые принимают указанные выше функции в качестве значений:

  • shape-outside : укладывает контент вокруг (вне) фигуры;
  • shape-inside : укладывает контент внутри фигуры.

Вы можете использовать свойство shape-outside в сочетании со свойством shape-margin, чтобы добавить отступ от краев фигуры, этот отступ отодвинет текстовый контент от границ фигуры, создавая между ними свободное пространство. Аналогично сочетание свойств shape-inside и shape-padding отодвигает контент от границ фигуры изнутри, создавая внутренний отступ.

С помощью свойств и функций фигур, объявить фигуру, применяемую к элементу, можно одной строкой CSS -кода:

Даже если вы примените этот CSS -код к элементу, форма не будет применена, если не будут выполнены два условия:

  • Элемент должен быть плавающим. Будущие уровни CSS Shapes предоставят нам возможность определять фигуры и для не плавающих элементов, однако пока мы не можем сделать это;
  • Элемент должен иметь внутренние размеры. Высота и ширина, установленные в элементе, будут использоваться для создания системы координат этого элемента.

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

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

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

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

Исходный бокс Shapes

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

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

Ключевое слово padding-box в приведенном выше коде указывает, что форма применяется, и она ограничивается боксом заполнения (областью заполнения) элемента. Функция circle() определяет фигуру круга, его размер и положение в элементе.

Определение Shapes с помощью функции фигуры

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

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

Вы можете спросить: « Почему бы не использовать border-radius для круглого изображения? » Ответ таков — свойство border-radius не влияет на обтекание контентом внутри или вокруг элемента, к которому применяется — оно не влияет на область контента внутри элемента или обтекание областью контента вокруг элемента. Оно влияет только на границы элемента и фоны.

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

Мы используем свойство border-radius , чтобы сделать изображение круглым, таким образом, мы обычно и придаем круглую форму изображениям или другим элементам страницы:

В браузере, который не поддерживает CSS Shapes , контент вокруг круглого изображения будет обтекать его так, как будто оно вовсе не имеет круглую форму. Это будет нашим запасным вариантом для старых браузеров.

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

С помощью этого кода текст будет « видеть » круглую фигуру, примененную к изображению и укладываться вокруг него, как это было показано на первом скриншоте. (Сам результат вы можете увидеть здесь .) В браузерах, не поддерживающих Shapes , будет применяться код, который выводит контент так, как показано на втором скриншоте.

Вы можете использовать функцию circle() , как есть, или путем передачи в нее параметров. Ее официальный синтаксис следующий:

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

Вы можете указать радиус окружности, используя любые единицы длины ( px , em , pt и т.д.) Вы также можете указать радиус, используя либо furthest-side , либо closest-side , но по умолчанию используется параметр closest-side , что означает, что браузер будет использовать расстояние от центра элемента до ближайшей к нему стороны, как длину радиуса. farthest-side использует расстояние от центра до самой дальней стороны элемента:

Функция ellipse() действует так же, как функция circle() , с теми же значениями, за исключением того, что вместо одного параметра радиуса, она принимает два: один для длины радиуса по оси х , второй — по оси у :

Функция inset() напрямую не связана ни с кругом, ни с эллипсом, она используется для создания прямоугольных фигур внутри элемента.

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

Функция inset() принимает от одного до четырех значений смещения, которые определяют смещения внутри от краев исходного бокса. Они определяют, где прямоугольник будет размещен внутри элемента.

Функция также принимает необязательный параметр степени закругления углов вставляемого прямоугольника. Закругленные углы задаются точно так же, как border-radius , с использованием от одного до четырех значений, в сочетании с ключевым словом round :

Следующий код будет создавать прямоугольник с закругленными углами для плавающего элемента:

Реальный пример вы можете увидеть здесь .

И еще одна функция Shape — polygon() , она определяет более сложные произвольные фигуры, используя любое количество точек. Функция принимает набор пар координат, каждая из которых указывает положение одной точки. Множество точек в совокупности определяют фигуру.

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

CSS для приведенного выше изображения выглядит следующим образом:

Вы можете установить координаты точек, определяющих форму, в единицах длины или процентах, как в данном случае.

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

В самом деле, применение функции фигуры к элементу — изображению, контейнеру или чему-то среднему — не влияет ни на что, кроме обтекания текстом обозначенной области фигуры. Фон, границы и все остальное остаются неизменным.

Для того чтобы визуализировать форму многоугольника, который мы создали, мы должны « обрезать » части изображения вне этой фигуры. В этом нам поможет свойство clip-path из CSS Masking Module .

Свойство clip-path принимает те же функции фигуры и значения, что и свойства фигуры. Если мы передадим в свойство clip-path ту же фигуру многоугольника, которую мы использовали в свойстве shape-outside , мы обрежем все части изображения, которые находятся вне определенной фигуры:

Результат будет следующим:

Свойство clip-path на сегодняшний день поддерживается с помощью префиксов, поэтому оно работает в Chrome через добавление к свойству префикса -webkit- . Реальный пример вы можете увидеть здесь .

Свойство clip-path прекрасно сочетается со свойствами фигур, так как оно помогает визуализировать созданные фигуры и обрезать все части элемента, которые находятся вне определенных форм. Поэтому вы, вероятно, найдете его полезным для себя и будете часто использовать его вместе со свойствами Shapes .

Функция polygon() также может принимать (необязательно) ключевые слова nonzero или evenodd . С их помощью указывается, как располагаются относительно друг друга области внутри фигуры многоугольника, которые имеют пересекающиеся сектора.

Больше об этом вы можете узнать в разделе свойства SVG fill-rule .

Определение фигуры с помощью изображения

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

Фигура определяется пикселями, чьи альфа-значения больше, чем определенное крайнее значение. Этот порог по умолчанию равен 0,0 (полностью прозрачный), или вы можете установить собственное значение с помощью свойства shape-image-threshold . Таким образом, любой непрозрачный пиксель будет использоваться как часть определенной формы из изображения.

Будущие уровни CSS Shapes смогут определять переходы, используя данные яркости изображения, вместо альфа-данных. Если это произойдет, shape-image-threshold сможет использовать или альфа-данные, или яркость, в зависимости от состояния переключателя.

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

С помощью свойства shape-outside со значением url() , указывающим на это изображение фотографии, мы можем задать обтекание контентом вокруг элемента в форме листа:

Конечно, если бы вы применяли к элементу фон, его нужно было бы обрезать вне определенной фигуры. Так как clip-path не принимает альфа-изображение в качестве значения, это можно сделать с помощью свойства mask-image (с соответствующими префиксами) из Masking Module . Результат выглядит следующим образом:

Если вы создаете сложные фигуры, вы, возможно, захотите определить форму, используя изображение. Это позволит использовать альфа-канал изображения в Photoshop , вместо того, чтобы вручную определять точки.

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

CSS Shapes в адаптивном дизайне

Может ли CSS Shapes использоваться в процессе разработки адаптивного дизайна? Текущая спецификация уже охватывает shape-outside , и так как мы можем указывать размеры элемента не только в различных единицах длины, но и в процентах, мы смело можем этим пользоваться.

Это означает, что элемент с заданной shape-outside будет полностью адаптивным, как и любой другой плавающий элемент с размерами, заданными в процентах.

shape-inside пока еще не является адаптивной, но это только потому, что данный вопрос специально реализуется в Модульном уровне 2 , многие из нынешних ограничений будут решены в следующем уровне.

Инструменты Shape

Создание сложных форм с помощью функций фигур может оказаться непростой задачей, особенно если вы при помощи функции polygon() создаете фигуру, состоящую из множества точек, каждая со своими координатами. К счастью, команда веб-платформы компании Adobe работает над развитием интерактивного инструментария, что сделает многие вещи гораздо проще.

Беар Трэвис создал коллекцию Shape Tools , которая позволяет визуально задавать многоугольные фигуры. Затем инструмент автоматически генерирует для нас функцию фигуры. Это довольно удобно, но данные инструменты имеют определенные ограничения.

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

Более продвинутый и гибкий инструмент Shapes был разработан командой Adobe Web Platform . Инструмент был недавно выпущен в качестве расширения для бесплатного редактора Brackets компании.

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

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

В правой части окна браузера осуществляется редактирование фигуры, а слева сразу интерактивно отображается код:

Этот инструмент станет для вас незаменимым, потому что он облегчает создание, редактирование и отладку фигур. Разван Калиман написал статью в блоге Brackets , из которой вы можете получить представление о том, как вам установить и начать использовать редактор Shapes в Brackets .

Будущее: CSS Exclusions

Спецификация CSS Shapes раньше использовалась и как спецификация CSS Shapes , и как Exclusions , но позже они были разделены.

В то время как CSS Shapes определяет свойства shape-inside и shape-outside , CSS Exclusions будет определять свойства, которые позволяют нам уложить контент вокруг элементов, которые не являются плавающими, например, элементов с заданным абсолютно расположением.

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

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

Подобные макеты с элементами определенной формы расположенными по центру статьи — с текстом, обтекающим их со всех сторон — также будут возможны.

Дальнейшее развитие Shapes

Текущая спецификация CSS Shapes — это лишь первый шаг. Вскоре новые опции предоставят нам больше контроля при создании фигур и укладке контента в и вокруг них. Что в свою очередь облегчит превращение макетов в интерактивные конструкции с помощью всего нескольких строк кода.

Сегодня редакторы спецификации ориентированы на работу с shape-outside , и еще до конца 2014 года мы, вероятно, увидим широкое применение CSS Shapes .

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

Вы также можете расширить тест Modernizr с помощью этого скрипта , чтобы проверить поддерживается ли shape-outside или скачать пользовательские сборки, включающие этот скрипт.

CSS Shapes еще больше приблизит веб-дизайн к полиграфии. Примеры, приведенные в этой статье, довольно просты, но они позволят вам создавать конструкции, настолько же сложные, как и в иллюстрированных журналах или на плакатах — все это вы сможете воссоздать на экране.

Что бы вас не заинтересовало — макеты неправильной формы или анимированные Shapes — пришло время попробовать их на практике и поэкспериментировать.

Данная публикация представляет собой перевод статьи « CSS Shapes 101 » , подготовленной дружной командой проекта Интернет-технологии.ру

Что такое Shape_hints.swf и как его исправить?

Совместима с Windows XP, Vista, 7, 8 и 10

Обзор Shape_hints.swf

Что такое Shape_hints.swf?

Shape_hints.swf представляет собой разновидность файла SWF, связанного с Macromedia Dreamweaver Ultradev 4, который разработан Macromedia Inc. для ОС Windows. Последняя известная версия Shape_hints.swf: 1.0.0.0, разработана для Windows. Данный файл SWF имеет рейтинг популярности 1 звезд и рейтинг безопасности «Неизвестно».

Почему у меня наблюдаются ошибки в файлах типа SWF?

Если Windows не может нормально загрузить файл Shape_hints.swf, или файл SWF заражен вирусом или вредоносным ПО, вы увидите сообщение об ошибке. Для получения дополнительной информации см. «Причины ошибок Shape_hints.swf» ниже.

В каких случаях появляются ошибки в файлах типа SWF?

Ошибки SWF, например, связанные с shape_hints.swf, чаще всего появляются во время запуска компьютера, запуска программы или при попытке использования специфических функций в вашей программе (например, печать).

Распространенные сообщения об ошибках в Shape_hints.swf

Наиболее распространенные ошибки shape_hints.swf, которые могут возникнуть на компьютере под управлением Windows, перечислены ниже:

  • «Ошибка в файле Shape_hints.swf.»
  • «Отсутствует файл Shape_hints.swf.»
  • «Shape_hints.swf не найден.»
  • «Не удалось загрузить Shape_hints.swf.»
  • «Не удалось зарегистрировать shape_hints.swf.»
  • «Ошибка выполнения: shape_hints.swf.»
  • «Ошибка загрузки shape_hints.swf.»

Такие сообщения об ошибках SWF могут появляться в процессе установки программы, когда запущена программа, связанная с shape_hints.swf (например, Macromedia Dreamweaver Ultradev 4), при запуске или завершении работы Windows, или даже при установке операционной системы Windows. Отслеживание момента появления ошибки shape_hints.swf является важной информацией при устранении проблемы.

Причины ошибок в файле Shape_hints.swf

Проблемы Shape_hints.swf могут быть отнесены к поврежденным или отсутствующим файлам, содержащим ошибки записям реестра, связанным с Shape_hints.swf, или к вирусам / вредоносному ПО.

Более конкретно, данные ошибки shape_hints.swf могут быть вызваны следующими причинами:

  • Поврежденные ключи реестра Windows, связанные с shape_hints.swf / Macromedia Dreamweaver Ultradev 4.
  • Вирус или вредоносное ПО, которые повредили файл shape_hints.swf или связанные с Macromedia Dreamweaver Ultradev 4 программные файлы.
  • Другая программа злонамеренно или по ошибке удалила файлы, связанные с shape_hints.swf.
  • Другая программа находится в конфликте с Macromedia Dreamweaver Ultradev 4 и его общими файлами ссылок.
  • Поврежденная загрузка или неполная установка программного обеспечения Macromedia Dreamweaver Ultradev 4.

Как исправить ошибки в Shape_hints.swf

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

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

Шаг 1: Исправить записи реестра, связанные с Macromedia Dreamweaver Ultradev 4

Иногда ошибки shape_hints.swf и другие системные ошибки SWF могут быть связаны с проблемами в реестре Windows. Несколько программ может использовать файл shape_hints.swf, но когда эти программы удалены или изменены, иногда остаются «осиротевшие» (ошибочные) записи реестра SWF.

В принципе, это означает, что в то время как фактическая путь к файлу мог быть изменен, его неправильное бывшее расположение до сих пор записано в реестре Windows. Когда Windows пытается найти файл по этой некорректной ссылке (на расположение файлов на вашем компьютере), может возникнуть ошибка shape_hints.swf. Кроме того, заражение вредоносным ПО могло повредить записи реестра, связанные с Macromedia Dreamweaver Ultradev 4. Таким образом, эти поврежденные записи реестра SWF необходимо исправить, чтобы устранить проблему в корне.

Редактирование реестра Windows вручную с целью удаления содержащих ошибки ключей shape_hints.swf не рекомендуется, если вы не являетесь специалистом по обслуживанию ПК. Ошибки, допущенные при редактировании реестра, могут привести к неработоспособности вашего ПК и нанести непоправимый ущерб вашей операционной системе. На самом деле, даже одна запятая, поставленная не в том месте, может воспрепятствовать загрузке компьютера!

В связи с подобным риском мы настоятельно рекомендуем использовать надежные инструменты очистки реестра, такие как WinThruster (разработанный Microsoft Gold Certified Partner), чтобы просканировать и исправить любые проблемы, связанные с shape_hints.swf. Используя очистку реестра, вы сможете автоматизировать процесс поиска поврежденных записей реестра, ссылок на отсутствующие файлы (например, вызывающих ошибку shape_hints.swf) и нерабочих ссылок внутри реестра. Перед каждым сканированием автоматически создается резервная копия, позволяющая отменить любые изменения одним кликом и защищающая вас от возможного повреждения компьютера. Самое приятное, что устранение ошибок реестра может резко повысить скорость и производительность системы.

Предупреждение: Если вы не являетесь опытным пользователем ПК, мы НЕ рекомендуем редактирование реестра Windows вручную. Некорректное использование Редактора реестра может привести к серьезным проблемам и потребовать переустановки Windows. Мы не гарантируем, что неполадки, являющиеся результатом неправильного использования Редактора реестра, могут быть устранены. Вы пользуетесь Редактором реестра на свой страх и риск.

Перед тем, как вручную восстанавливать реестр Windows, необходимо создать резервную копию, экспортировав часть реестра, связанную с shape_hints.swf (например, Macromedia Dreamweaver Ultradev 4):

  1. Нажмите на кнопку Начать.
  2. Введите «command» в строке поиска. ПОКА НЕ НАЖИМАЙТЕENTER!
  3. Удерживая клавиши CTRL-Shift на клавиатуре, нажмите ENTER.
  4. Будет выведено диалоговое окно для доступа.
  5. Нажмите Да.
  6. Черный ящик открывается мигающим курсором.
  7. Введите «regedit» и нажмите ENTER.
  8. В Редакторе реестра выберите ключ, связанный с shape_hints.swf (например, Macromedia Dreamweaver Ultradev 4), для которого требуется создать резервную копию.
  9. В меню Файл выберите Экспорт.
  10. В списке Сохранить в выберите папку, в которую вы хотите сохранить резервную копию ключа Macromedia Dreamweaver Ultradev 4.
  11. В поле Имя файла введите название файла резервной копии, например «Macromedia Dreamweaver Ultradev 4 резервная копия».
  12. Убедитесь, что в поле Диапазон экспорта выбрано значение Выбранная ветвь.
  13. Нажмите Сохранить.
  14. Файл будет сохранен с расширением .reg.
  15. Теперь у вас есть резервная копия записи реестра, связанной с shape_hints.swf.

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

Мы не несем никакой ответственности за результаты действий, совершенных по инструкции, приведенной ниже — вы выполняете эти задачи на свой ​​страх и риск.

Шаг 2: Проведите полное сканирование вашего компьютера на вредоносное ПО

Есть вероятность, что ошибка shape_hints.swf может быть связана с заражением вашего компьютера вредоносным ПО. Эти вредоносные злоумышленники могут повредить или даже удалить файлы, связанные с SWF. Кроме того, существует возможность, что ошибка shape_hints.swf связана с компонентом самой вредоносной программы.

Совет: Если у вас еще не установлены средства для защиты от вредоносного ПО, мы настоятельно рекомендуем использовать Emsisoft Anti-Malware (скачать). В отличие от других защитных программ, данная программа предлагает гарантию удаления вредоносного ПО.

Шаг 3: Очистить систему от мусора (временных файлов и папок) с помощью очистки диска (cleanmgr)

Со временем ваш компьютер накапливает ненужные файлы в связи с обычным интернет-серфингом и повседневным использованием компьютера. Если такие ненужные файлы иногда не удалять, они могут привести к снижению быстродействия Macromedia Dreamweaver Ultradev 4 или к ошибке shape_hints.swf, возможно вследствие конфликтов файлов или перегрузки жесткого диска. Удаление таких временных файлов при помощи утилиты Очистка диска может не только устранить ошибку shape_hints.swf, но и существенно повысить быстродействие вашего компьютера.

Совет: Хотя утилита Очистки диска является прекрасным встроенным инструментом, она удаляет не все временные файлы с вашего компьютера. Другие часто используемые программы, такие как Microsoft Office, Firefox, Chrome, Live Messenger, а также сотни других программ не поддаются очистке при помощи программы Очистка диска (включая некоторые программы Macromedia Inc.).

Из-за недостатков утилиты Windows Очистка диска (cleanmgr) мы настоятельно рекомендуем использовать специализированное программное обеспечение очистки жесткого диска / защиты конфиденциальности, например WinSweeper (разработано Microsoft Gold Partner), для очистки всего компьютера. Запуск WinSweeper раз в день (при помощи автоматического сканирования) гарантирует, что ваш компьютер всегда будет чист, будет работает быстро и без ошибок shape_hints.swf, связанных с временными файлами.

Как запустить Очистку диска (cleanmgr) (Windows XP, Vista, 7, 8 и 10):

  1. Нажмите на кнопку Начать.
  2. Введите «command» в строке поиска. ПОКА НЕ НАЖИМАЙТЕENTER!
  3. Удерживая клавиши CTRL-Shift на клавиатуре, нажмите ENTER.
  4. Будет выведено диалоговое окно для доступа.
  5. Нажмите Да.
  6. Черный ящик открывается мигающим курсором.
  7. Введите «cleanmgr» и нажмите ENTER.
  8. Программа Очистка диска приступит к подсчету занятого места на диске, которое вы можете освободить.
  9. Будет открыто диалоговое окно Очистка диска, содержащее флажки, которые вы можете выбрать. В большинстве случаев категория «Временные файлы» занимает большую часть дискового пространства.
  10. Установите флажки напротив категорий, которые вы хотите использовать для очистки диска, и нажмите OK.

Шаг 4: Обновите драйверы устройств на вашем компьютере

Ошибки Shape_hints.swf могут быть связаны с повреждением или устареванием драйверов устройств. Драйверы с легкостью могут работать сегодня и перестать работать завтра по целому ряду причин. Хорошая новость состоит в том, что чаще всего вы можете обновить драйверы устройства, чтобы устранить проблему с SWF.

В связи с временными затратами и общей сложностью обновления драйверов мы настоятельно рекомендуем использовать утилиту обновления драйверов, например DriverDoc (разработана Microsoft Gold Partner), для автоматизации этого процесса.

Пожалуйста, учтите: Ваш файл shape_hints.swf может и не быть связан с проблемами в драйверах устройств, но всегда полезно убедиться, что на вашем компьютере установлены новейшие версии драйверов оборудования, чтобы максимизировать производительность вашего ПК.

Шаг 5: Используйте Восстановление системы Windows, чтобы «Отменить» последние изменения в системе

Восстановление системы Windows позволяет вашему компьютеру «отправиться в прошлое», чтобы исправить проблемы shape_hints.swf. Восстановление системы может вернуть системные файлы и программы на вашем компьютере к тому времени, когда все работало нормально. Это потенциально может помочь вам избежать головной боли от устранения ошибок, связанных с SWF.

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

Чтобы использовать Восстановление системы (Windows XP, Vista, 7, 8 и 10):

  1. Нажмите на кнопку Начать.
  2. В строке поиска введите «Восстановление системы» и нажмите ENTER.
  3. В окне результатов нажмите Восстановление системы.
  4. Введите пароль администратора (при появлении запроса).
  5. Следуйте инструкциям Мастера для выбора точки восстановления.
  6. Восстановить ваш компьютер.

Шаг 6: Удалите и установите заново программу Macromedia Dreamweaver Ultradev 4, связанную с Shape_hints.swf

Инструкции для Windows 7 и Windows Vista:

  1. Откройте «Программы и компоненты», нажав на кнопку Пуск.
  2. Нажмите Панель управления в меню справа.
  3. Нажмите Программы.
  4. Нажмите Программы и компоненты.
  5. Найдите Macromedia Dreamweaver Ultradev 4 в столбце Имя.
  6. Нажмите на запись Macromedia Dreamweaver Ultradev 4.
  7. Нажмите на кнопку Удалить в верхней ленте меню.
  8. Следуйте инструкциям на экране для завершения удаления Macromedia Dreamweaver Ultradev 4.

Инструкции для Windows XP:

  1. Откройте «Программы и компоненты», нажав на кнопку Пуск.
  2. Нажмите Панель управления.
  3. Нажмите Установка и удаление программ.
  4. Найдите Macromedia Dreamweaver Ultradev 4 в списке Установленные программы.
  5. Нажмите на запись Macromedia Dreamweaver Ultradev 4.
  6. Нажмите на кнопку Удалить справа.
  7. Следуйте инструкциям на экране для завершения удаления Macromedia Dreamweaver Ultradev 4.

Инструкции для Windows 8:

  1. Установите указатель мыши в левой нижней части экрана для показа изображения меню Пуск.
  2. Щелкните правой кнопкой мыши для вызова Контекстного меню Пуск.
  3. Нажмите Программы и компоненты.
  4. Найдите Macromedia Dreamweaver Ultradev 4 в столбце Имя.
  5. Нажмите на запись Macromedia Dreamweaver Ultradev 4.
  6. Нажмите Удалить/изменить в верхней ленте меню.
  7. Следуйте инструкциям на экране для завершения удаления Macromedia Dreamweaver Ultradev 4.

После того, как вы успешно удалили программу, связанную с shape_hints.swf (например, Macromedia Dreamweaver Ultradev 4), заново установите данную программу, следуя инструкции Macromedia Inc..

Совет: Если вы абсолютно уверены, что ошибка SWF связана с определенной программой Macromedia Inc., удаление и повторная установка программы, связанной с shape_hints.swf с большой вероятностью решит вашу проблему.

Шаг 7: Запустите проверку системных файлов Windows («sfc /scannow»)

Проверка системных файлов представляет собой удобный инструмент, включаемый в состав Windows, который позволяет просканировать и восстановить поврежденные системные файлы Windows (включая те, которые имеют отношение к shape_hints.swf). Если утилита проверки системных файлов обнаружила проблему в SWF или другом важном системном файле, она предпримет попытку заменить проблемные файлы автоматически.

Чтобы запустить проверку системных файлов (Windows XP, Vista, 7, 8 и 10):

  1. Нажмите на кнопку Начать.
  2. Введите «command» в строке поиска. ПОКА НЕ НАЖИМАЙТЕENTER!
  3. Удерживая клавиши CTRL-Shift на клавиатуре, нажмите ENTER.
  4. Будет выведено диалоговое окно для доступа.
  5. Нажмите Да.
  6. Черный ящик открывается мигающим курсором.
  7. Введите «sfc /scannow» и нажмите ENTER.
  8. Проверка системных файлов начнет сканирование на наличие проблем shape_hints.swf и других системных файлов (проявите терпение — проверка может занять длительное время).
  9. Следуйте командам на экране.

Шаг 8: Установите все доступные обновления Windows

Microsoft постоянно обновляет и улучшает системные файлы Windows, связанные с shape_hints.swf. Иногда для решения проблемы SWF нужно просто напросто обновить Windows при помощи последнего пакета обновлений или другого патча, которые Microsoft выпускает на постоянной основе.

Чтобы проверить наличие обновлений Windows (Windows XP, Vista, 7, 8 и 10):

  1. Нажмите на кнопку Начать.
  2. Введите «update» в строке поиска и нажмите ENTER.
  3. Будет открыто диалоговое окно Обновление Windows.
  4. Если имеются доступные обновления, нажмите на кнопку Установить обновления.

Шаг 9: Произведите чистую установку Windows

Предупреждение: Мы должны подчеркнуть, что переустановка Windows займет очень много времени и является слишком сложной задачей, чтобы решить проблемы shape_hints.swf. Во избежание потери данных вы должны быть уверены, что вы создали резервные копии всех важных документов, изображений, программ установки программного обеспечения и других персональных данных перед началом процесса. Если вы сейчас е создаете резервные копии данных, вам стоит немедленно заняться этим (скачать рекомендованное решение для резервного копирования), чтобы защитить себя от безвозвратной потери данных.

Пожалуйста, учтите: Если проблема shape_hints.swf не устранена после чистой установки Windows, это означает, что проблема SWF ОБЯЗАТЕЛЬНО связана с аппаратным обеспечением. В таком случае, вам, вероятно, придется заменить соответствующее оборудование, вызывающее ошибку shape_hints.swf.

Примечание
Имя файла: shape_hints.swf Последняя известная версия: 1.0.0.0
Разработчик: Macromedia Inc. Размер файла (байтов): 6793
Программное обеспечение: Macromedia Dreamweaver Ultradev 4 Операционная система: Windows
Описание: 2000
MD5: 0C5B7E61DEA2CE356E09EE12B465CAC3
SHA1: ED6638C7955B30CD68D13EB927814F894F77D8E7

Информация об операционной системе

Сообщения об ошибках Shape_hints.swf могут появляться в любых из нижеперечисленных операционных систем Microsoft Windows:

  • Windows 10
  • Windows 8
  • Windows 7
  • Windows Vista
  • Windows XP
  • Windows ME
  • Windows 2000

Проблема с Shape_hints.swf все еще не устранена?

Обращайтесь к нам в любое время в социальных сетях для получения дополнительной помощи:

Об авторе: Джей Гитер (Jay Geater) является президентом и генеральным директором корпорации Solvusoft — глобальной компании, занимающейся программным обеспечением и уделяющей основное внимание новаторским сервисным программам. Он всю жизнь страстно увлекался компьютерами и любит все, связанное с компьютерами, программным обеспечением и новыми технологиями.

Отобразить файлы SWF в алфавитном порядке:

Вы загружаете пробное программное обеспечение. Подписка на один год стоимостью $39,95 необходима для разблокировки всех функций приложения. Подписка обновляется автоматически по завершению (Узнать больше). Нажав на кнопку «Начать загрузку» и установив «Софт»», я подтверждаю, что прочитал(а) и согласен(на) с Пользовательским соглашением и Политикой конфиденциальности Solvusoft.

Введение в CSS Shapes

Дата публикации: 2020-12-26

От автора: CSS Shapes позволяют нам создавать интересные и уникальные макеты, определяя геометрические фигуры, изображения и градиенты, вокруг которых может обтекать текстовое содержимое. Узнайте в этом введении, как их использовать.

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

CSS Shapes позволяют определять геометрические фигуры, вокруг которых может обтекать текст. Этими фигурами могут быть круги, эллипсы, простые или сложные многоугольники и даже изображения и градиенты. В качестве нескольких практических примеров дизайна с использованием Shapes можно привести текст, обтекающий вокруг круглого аватара, отображение текста поверх определенной части полноразмерного фонового изображения и текст, обтекающий буквицы в статье.

Теперь, когда CSS Shapes получили широкую поддержку в современных браузерах, стоит рассмотреть их гибкость и функционал, которые они предоставляют, чтобы понять, имеет ли смысл применять их в вашем следующем дизайнерском проекте.

Внимание: на момент написания этой статьи CSS Shapes поддерживались в Firefox, Chrome, Safari и Opera, а также в мобильных браузерах, таких как iOS Safari и Chrome для Android. Shapes не поддерживаются IE и находятся на рассмотрении в Microsoft Edge.

Как создать сайт самому?

Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

Общий обзор CSS Shapes

Текущая реализация CSS Shapes — это CSS Shapes Module Level 1, который в основном описывает свойство shape-outside. shape-outside определяет фигуру, вокруг которой может обтекать текст.

Учитывая, что есть свойство shape-outside, вы можете предположить, что есть и соответствующее свойство shape-inside, которое связано с текстом, содержащимся внутри фигуры. Свойство shape-inside может быть введено в будущем, но в настоящее время оно рассматривается только в качестве возможности в CSS Shapes Module Level 2, и не реализовано ни в одном браузере.

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

Основные функции Shapes

Мы можем определить в CSS все виды базовых фигур, применив к свойству shape-outside следующие значения функций: circle(), ellipse(), inset(), polygon().

Чтобы применить свойство shape-outside к элементу, этот элемент должен быть плавающим и иметь определенные высоту и ширину. Давайте рассмотрим каждую из четырех основных фигур и продемонстрируем, как их можно использовать.

Начнем с функции circle(). Представьте себе ситуацию, в которой у нас есть круговой аватар автора, который мы хотим разместить слева, и мы также хотим, чтобы текст информации об авторе обтекал его по кругу. Простого использования border-radius: 50% для элемента аватара недостаточно, чтобы текст имел круглую форму; текст все равно будет обрабатывать аватар как прямоугольный элемент.

С помощью фигуры круга мы можем продемонстрировать, как текст может обтекать аватар по кругу. Мы начнем с определения класса circle для стандартного div и создания нескольких абзацев. (Я использовал в качестве текста заполнителя цитаты Боба Росса.)

Способы «защиты» flash-приложений

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

— введение

В мире flash (речь, конечно, о клиенте) не существует гарантированной защиты от злоумышленников, можно лишь отсеять совсем незадачливых и усложнить работу тем, кто решит идти до конца. Стремиться стоит к тому, чтобы стоимость и время работы недоброжелателя были как можно выше, а Ваши затраты — как можно меньше. В идеале старайтесь добиться того, чтобы злоумышленнику было проще, быстрее и дешевле купить или написать с нуля, чем обходить Ваши препятствия.

Борьба между системами защиты и системами обхода\снятия защит ведётся постоянно. Это связано с тем, что любому желающему доступна спецификация формата SWF и байткода (тут, здесь и ещё тут), в который компилируется ActionScript3 (далее AS3) код. Это позволяет свободно писать собственные библиотеки и приложения для разбора SWF файлов на составляющие (графику, звуки, байткод и т.д.), и делать что угодно с байткодом, например:

  • писать анализаторы байткода для декомпиляции ABC (ActionScript ByteСode) файлов, которые можно найти в тэгах «DoABC» в скомпилированном AS3 SWF файле (а в AS2 код обычно находится в тэгах «DoAction» и «DoInitAction»);
  • писать приложения, модифицирующие байткод, например, для его обфускации с помощью различных приёмов, которые могут использовать специфику декомпиляции в своих целях;
  • писать приложения, позволяющие изменять (патчить) байткод в уже скомпилированных SWF файлах;
  • модифицировать FP для вывода (трейса) исполняющегося байткода;

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

— содержание

— 1. URL-Lock, защита от локального запуска

Цель – заставить SWF файл работать в определенных условиях, например, только под одним или несколькими доменами, либо запретить локальный запуск.
После определения того факта, что SWF запущен не там, где должен бы, можно запрограммировать его поведение как угодно. Вы можете отправлять на сервер неугодные домены\URL (если это не localhost) и заносить в какой-нибудь лог.
Подлинные домены (под которыми должен работать SWF файл) лучше держать в зашифрованном виде или не держать в клиенте вообще (принимать от сервера также в зашифрованном виде).
Рассмотрим несколько способов привязки к доменам и определения локального запуска.

Привязка к доменам с помощью получения текущего URL\домена

Это самый распространённый способ привязки к домену. Для получения текущего URL или домена обычно используют:

а) loaderInfo:

  • root.loaderInfo.url ( _root._url – для AS2) – содержит путь до самого SWF файла, если SWF загружен с помощью другого SWF, то root.loaderInfo.url у загруженного SWF останется прежним
  • root.loaderInfo.loaderURL – содержит путь до самого SWF файла, либо до его загрузчика, если он был загружен с помощью другого SWF файла
  • root.loaderInfo.loader — содержит ссылку на экземпляр класса Loader, либо null, если SWF не был загружен внешним загрузчиком (заметьте, что root.loaderInfo.loader == root.parent , а root.parent == stage , если SWF не имеет загрузчика). Причём, если загрузчик не находится в доверенной зоне (находится в другом SecurityDomain), то при обращении к root.loaderInfo.loader или к root.parent из загружаемого SWF, будет возникать исключение SecurityError, в сообщении которого также будет содержаться ссылка до загрузчика

Пути не изменятся, если SWF встроить в HTML страницу на «неродном» домене без перемещения самого SWF файла.

б) LocalConnection: позволяет получить имя домена, под которым в данный момент запущен SWF файл с помощью LocalConnection.domain .
Если чужой SWF находится в домене, отличном от домена Вашего SWF, и Вы загрузили тот SWF в текущий домен безопасности так:
или с помощью Loader.loadBytes , то LocalConnection.domain загруженного SWF будет содержать домен Вашего SWF.
Пути не изменятся, если SWF встроить в HTML страницу на «неродном» домене без перемещения самого SWF файла.

в) ExternalInterface: позволяет использовать JavaScript (далее JS). Например, путь до текущей страницы, в которую встроен SWF, можно получить с помощью window.location.href . Для вызова JS используйте ExternalInterface.call . Т.к. call в качестве первого параметра принимает название метода, а window.location.href – свойство, то следует использовать toString():
Кстати, домен тоже можно получить через ExternalInterface.call :

ExternalInterface можно использовать и для вызова своих JS функций на той странице, где находится SWF – как изначально существующих, так и созданных Вами с помощью eval:
И не стоит забывать, что этот способ требует выполнения JS, что не всегда возможно.
При попытке обойти с помощью встраивания в HTML страницу на «неродном» домене без перемещения самого SWF файла, выполнение ExternalInterface.call будет генерировать SecurityError.

г) FlashVars: иногда, при размещении SWF в HTML страничке или при загрузке из другого SWF, передают путь до домена и\или иные данные через FlashVars (что на самом деле – плохо, т.к. это явная «дыра» для отвязки от доменов):

FlashVars можно передать в качестве параметра:
или через имя файла:

Дотянуться до FlashVars можно так:
— в AS3 – root.loaderInfo.parameters.var1
— в AS2 – _root.var1

Привязка к доменам без получения текущего URL или домена

Этот способ основан на кроссдоменной политике безопасности. Привязываемый SWF при запуске пытается загрузить по прямому пути «специальный» файл-пустышку с определённого хоста, на котором находится файл crossdomain.xml с разрешением загрузки ресурсов только с доверенных доменов, на одном из которых и должен находиться SWF. Соответственно, если «ворованный» SWF файл будет обращаться к «специальному» файлу с домена, не прописанного в crossdomain.xml, произойдет нарушение изолированной среды (sandbox security violation) и «специальный» файл не загрузится. Также при этом сгенерируется исключение и сработает событие SecurityErrorEvent.SECURITY_ERROR у экземпляра класса LoaderInfo ( Loader.contentLoaderInfo ). Это позволит определить то, что SWF находится не там, где должен бы.
К «специальному» файлу следует обращаться по прямому пути, чтобы предотвратить его подмену.

Определение локального запуска

Локальный запуск SWF можно определить с помощью получения ссылки на SWF или HTML и проверки её на наличие подстроки «file://».
Если SWF запущен вне HTML, то метод ExternalInterface.call вернёт null.
Также можно проверить тип FP, в котором работает SWF, с помощью Capabilities.playerType :

  • «ActiveX» – при проигрывании через ActiveX FP, который, например, используется в IE
  • «Desktop» – для среды выполнения Adobe AIR (кроме SWF-содержимого, загруженного HTML страницей, со свойством Capabilities.playerType имеющим значение «PlugIn»)
  • «External» – при проигрывании через внешний FP или при запуске из-под Flash Professional IDE
  • «PlugIn» – при проигрывании через браузерный плагин (и для SWF-содержимого, загруженного HTML страницей в AIR приложении)
  • «StandAlone» – при проигрывании через автономный FP (при запуске локального SWF файла в браузерах, значение Capabilities.playerType != «StandAlone» )

Ещё один способ – с помощью сравнения Security.sandboxType с Security.REMOTE .

Все эти приёмы имеют свои преимущества и недостатки — некоторые не требуют сервера, но требуют перекомпиляции SWF файла при изменении доменов, к которым должна осуществляться привязка, а некоторые — наоборот.
В кодах к статье (ссылка на архив есть в конце статьи), в папке «1-URL Lock», вы найдёте пример с реализацией некоторых из описанных методов и пару примеров патчей одного из методов.
Внимание! Большинство приёмов URL-Lock можно обойти, работая из-под локального сервера, такого, как Denwer или XAMPP.

— 2. Переменные, ресурсы и классы

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

Защита переменных

Переменные надо прятать и защищать от изменений. Наиболее простой способ скрытия – написание своих «обёрток» вокруг базовых классов.
Например, CryptInt, CryptString и т.д. В самих классах можно написать методы для получения и отдачи значения, шифруя или расшифровывая его, что спрячет переменную в памяти. Взгляните на реализацию классов CryptInt и CryptString в кодах к статье, в папке «2-Memory&Domain\MemoryExample».
Также, для сокрытия значений переменных, можно разбивать их на составляющие, перемешивать, сдвигать и т.д. Можно даже попробовать написать некий конвейер, который будет перемещать скрываемое значение из одних переменных в другие, освобождая использованные переменные для GC (Garbage Collector). В качестве «временных хранилищ» для таких вот перерабатываемых переменных, можно использовать ByteArray, возможно, с привлечением «Алхимии» (fastmem из Azoth, Memory из Apparat).
А чтобы переменные не смогли поменять, даже если их найдут, то можно использовать, например, сравнение значения переменной с эталоном. Причём сравнение можно производить как при изменении переменной или обращении к ней, так и через заданные промежутки времени.

Подмена ресурсов

Подменить SWF целиком, либо подгружаемые внешние файлы можно в кэше браузера. В фальшивом SWF файле, или в подменённом ресурсе могут быть произведены любые изменения графики (размеры, прозрачность, сдвиг, частота кадров и т.д.) и кода (который делает то, чего бы вам меньше всего хотелось).
Чтобы усложнить задачу недоброжелателю (гарантированно защититься от подмены нельзя), следует проверять подлинность загружаемых данных и самого себя – можно, например, хранить MD5 и сравнивать при загрузке, причем MD5 хранить где-нибудь подальше и в зашифрованном виде.
Если SWF общается с сервером – производить скрытые проверки – отсылать на сервер MD5 загружаемых ресурсов, например.

Если есть возможность, то, для предотвращения подмены, внешние SWF и иные ресурсы можно хранить в теле основного SWF в зашифрованном виде и загружать их с помощью Loader.loadBytes , предварительно достав их из себя. Loader.loadBytes не сохраняет загружаемые данные в кэш браузера, но, в то же время, Ваш главный SWF будет закэширован. Подробнее об использовании Loader.loadBytes в таких случаях написано в одном из следующих разделов статьи.
Также можно запрашивать ресурсы и другие SWF файлы с сервера, лежащие в зашифрованном виде, далее расшифровывать их и загружать через Loader.loadBytes .

Переопределение классов

Скажу сразу, что гарантированно от этого защититься также не получится.
Подменять классы можно с помощью загрузки целевого SWF в ApplicationDomain загрузчика. Чтобы это сделать, можно написать загрузчик, содержащий класс с таким же именем, что и у подменяемого, и загрузить SWF в свой домен:
Таким образом, загружаемый SWF вынужден будет «общаться» с классом из своего загрузчика. Примеры реализации Вы сможете посмотреть в кодах к статье, в папке «2-Memory&Domain\applicationDomain». Вы встретите там примеры подмены классов с помощью загрузки в дочерний и в свой домен. В «жертве» Вы сможете найти несколько вариантов проверки на загруженность (которые обходятся заменой класса, в котором они содержатся).
Можно попытаться воспрепятствовать этому, загружая основной SWF через собственный загрузчик в новый ApplicationDomain:
и установив прочную связь между загрузчиком и основным SWF так, чтобы их было очень трудно «разлучить». Однако, если подменят загрузчик и сумеют эту связь сохранить, то эти усилия будут напрасны.

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

— 3. Водяные знаки (watermarks)

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

Вот некоторые их типы:

  1. Хорошо заметные элементы: текст, логотип, изображение и т.д.
    Если метка «впаяна» (относится как просто к изображениям, так и к графике в SWF), то её удаление придётся осуществлять вручную, редактируя данные, которые подверглись применению метки, что может оказаться очень сложной или вовсе невыполнимой задачей.
    Если же метка лежит отдельно (либо добавляется программно), например, на самом верхнем «слое» в SWF, то шансы аккуратно её удалить гораздо выше.
  2. Скрытые элементы. Они могут быть где угодно. От таких водяных знаков зачастую невозможно избавиться, т.к. никто кроме их создателей не будет знать, где искать. Такие метки должны быть уникальными, дабы была возможность доказать в суде, что это действительно метки, и что их невозможно повторить.

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

— 4. «Упаковывание» SWF

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

Вы можете добавить SWF в свой flex или flash проект с помощью тэга Embed, например, так:
Добавленный таким образом файл (это может быть любой двоичный файл или несколько файлов, если тэгов Embed будет несколько) помещается в тэг DefineBinaryData.
Далее можно загрузить «упакованный» таким образом файл с помощью Loader.loadBytes примерно так:
Существует масса инструментов для разбора SWF файлов и манипуляции с тэгами, благодаря которым существует возможность заменять или добавлять тэг DefineBinaryData.
Зная всё это, можно набросать свой простой «упаковщик» для автоматизации процесса. Перед оборачиванием, SWF можно как-нибудь преобразовать, например, обработав простым и быстрым симметричным xor’ом, а в загрузчике (который будет содержать «упакованный» SWF) написать код, который будет расшифровывать хранящийся в нём SWF, и уже затем его загружать. Простое «шифрование» с помощью xor нужно лишь для защиты от автоматической обработки декомпиляторами, чтобы SWF файл не находился внутри загрузчика в «чистом виде», более сложное шифрование бессмысленно.
Бывает, файлы «внедряют» и другими способами, например, в виде BitmapData, а также, создают несколько уровней вложенности.

Пример реализации простейшего упаковщика Вы сможете найти в кодах к статье, в папке «3-SWFPacker». Также там лежат два файла: orig.swf и packed.swf – можете попробовать их декомпилировать и сравнить.
Этот способ обходится, как минимум, двумя путями:
— исследование алгоритма расшифровщика в загрузчике и написание собственного расшифровщика (трудоёмко, особенно при большой вложенности загрузчиков)
— сохранение участка памяти, в котором находится уже распакованный и загруженный в FP SWF файл (просто и быстро, особенно, если не использованы средства защиты от сохранения из памяти, о которых написано ниже)

— 5. Динамическая генерация кода и редактирование SWF

Меня уже неоднократно спрашивали – возможно ли во flash в реальном времени генерировать код или создавать и редактировать другие SWF файлы? Ответ – да, это возможно!
Что касается кода, попробуйте AS3Commons ByteCode. Этот проект позволит Вам собирать и выполнять в реальном времени байткод.
Вы можете создавать классы с различными методами и свойствами с нуля, или наследуясь от других классов. Тела методов, например, могут описываются с помощью байткода линейно — methodBuilder.addOpcode(Opcode.getlocal_0) , или сразу блоками:
Вы можете загрузить сгенерированный код в AVM с помощью abcBuilder.buildAndLoad() .
Также для манипуляций с байткодом Вы можете попробовать as3abc, который, по словам автора, является частичным портом замечательного framework’а Apparat от небезызвестного Joa Ebert’а.
Если же Вы мечтаете о динамическом исполнении скрипта, а не байткода, то посмотрите на as3scriptinglib. Используя этот проект, Вы сможете в реальном времени компилировать и выполнять ActionScript 3/ECMAScript скрипты, включая JavaScript. Посмотреть на то, как это работает можно во flex демо-приложении. К сожалению, проект давно не обновляется.

Для экспериментов с самим SWF файлом и его структурой, попробуйте as3swf или swfassist.

Возможность генерации кода на лету, а также возможности редактирования и создания SWF в реальном времени, позволяют создавать различные сложные сценарии и приёмы для запутывания злоумышленника и скрытия Вашего кода. Вот, например первые 3 приёма, что пришли мне на ум:

  1. Генерировать и исполнять код\байткод на клиентской стороне по частям, приходящим от сервера, оставляя недоброжелателям в оригинальном SWF из всего кода, лишь то, что Вам не жалко им оставить (код свободных библиотек, кнопок и т.д.) + код расшифровщика и «строителя» уже финального кода.
  2. Собирать SWF по частям на клиентской стороне, аналогично трюку с кодом – можно собирать по тэгам, получая их от сервера, или, распаковывая поодиночке из зашифрованных данных, упакованных в загрузчике.
  3. Создавать самомодифицирующийся в процессе исполнения код, который, например, будет по определённым правилам или шаблонам генерировать одни и те же методы разными способами. Например, i++ можно реализовать как i+=1 (и это будет разный байткод, по крайней мере, он сейчас разный, в FP 10.1), также циклы могут быть реализованы по-разному, и т.д.
    Возможно, удастся так исхитриться, чтобы сгенерированный код изменял те методы, которые его сгенерировали. Например, чтобы в следующей итерации их выполнения сгенерировались уже другие классы и методы, тем самым значительно усложняя и запутывая код, чтобы, в случае его получения злоумышленником, последнему пришлось потратить как можно больше времени на разбор всей этой «каши».
    Предполагаю, что это довольно сложный (или даже невозможный во flash) трюк. Реально работающей реализации этой идеи на flash я пока не встречал. Если Вы встречали – то подскажите где посмотреть, буду рад изучить.

— 6. Запутывание кода (obfuscation) и скрытие данных

Сначала об обфускации. Ей могут подвергаться как исходный так и скомпилированный в байткод код. Обфускация исходного кода не так удобна и эффективна, запутывание байткода выглядит куда как привлекательней, т.к. исходный код должен удовлетворять требованиям компилятора, чего не скажешь о байткоде, в котором, к тому же, есть куда больший простор для проявления фантазии и смекалки.
Байткод обфускация может включать в себя переименование элементов в бессмысленные и недопустимые для компилятора имена, использование некоторых анти-декомпиляторских трюков, скрытие и «замусоривание» кода и др.

Переименование — это, пожалуй, единственный необратимый и 100% работающий способ хоть что-то спрятать во flash. Суть метода заключается в изменении у методов, свойств, пакетов и других элементов имён, которые сохраняются после компиляции, но не используются при выполнении кода. Автоматически восстановить оригинальные имена невозможно, придётся это делать вручную, догадываясь о них по смыслу во время исследования кода. После обфускации новые имена могут содержать недопустимые символы или зарезервированные слова, что не позволит с лёгкостью перекомпилировать и использовать код, полученный после декомпиляции.

Иногда при обфускации байткода расставляют «ловушки» для декомпиляторов, основанные на том, что декомпиляторы анализируют код комплексно, блоками, в отличие от FP, который исполняет его линейно, например:

  • Некорректный «мёртвый код» — создаётся искусственный условный переход, который всегда отрабатывает только одну ветку. Таким образом, во второй ветке мы имеем код, который никогда не выполнится, но будет обрабатываться декомпиляторами. И если там что-то непредсказуемое (а мы можем сделать там что угодно, т.к. FP до туда никогда не доберётся), то некоторые декомпиляторы могут повести себя необычно – например, аварийно завершиться.
  • Непредсказуемые байты в тех областях, которые игнорирует FP, но которые не всегда игнорируют и корректно обрабатывают декомпиляторы.

Кроме того, код можно просто «замусорить», увеличив его в объёмах и снизив его читабельность. Это может негативно сказаться на производительности.

Скрытие данных можно осуществлять разными способами, например:

  • Скрытие в SWF тэгах. Как я уже говорил, можно использовать flex-тэг Embed для встраивания любых файлов в SWF тэг DefineBinaryData, однако, можно создать и SWF тэг своего типа (FP такие тэги просто пропускает) с любыми данными, и затем извлекать их во время выполнения с помощью самораспарсивания.
    Пример есть в файлах к статье, в папке «4-CustomTag» — там находится проект на основе уже упомянутой библиотеки as3swf (изменён класс com.codeazur.as3swf.factories.SWFTagFactory и добавлен com.codeazur.as3swf.tags.TagCustom ). При запуске, SWF проверит — нет ли уже в нём нового тэга, и если есть — то выведет текст из него в текстовое поле, а если тэг не найдётся, то создаст сам в своей копии новый тэг со строкой, загрузит получившийся SWF в себя же с помощью Loader.loadBytes() и ещё предложит сохранить его в новый SWF файл.
  • Пользовательские мета данные. Для внедрения своих метаданных, сначала их необходимо объявить в коде (можно перед объявлением класса, метода, переменной):
    А затем добавить их названия в «Additional compiler arguments» таким образом: -keep-as3-metadata+=FocusMeta,Cool. После этого, Вы сможете обращаться к своим мета данным через XML, который можно получить с помощью describeType() :

Некоторые декомпиляторы и дизассемблеры позволяют с лёгкостью находить и исследовать пользовательские тэги и метаданные.

Для того, чтобы самостоятельно научиться создавать качественные помехи декомпиляторам, Вам придётся изучить то, как декомпиляторы исследуют байткод и SWF в целом. Но помните — разработчики декомпиляторов постоянно развивают свои продукты и если Ваш SWF с хитрыми приёмами попадёт к ним, то вскоре эти приёмы могут перестать работать.
Существуют утилиты для защиты SWF, применяющие только уловки против декомпиляторов или методики «упаковки», без обфускации имён, что позволяет получить чуть ли ни оригинальный исходный код, с помощью качественных публичных или собственных декомпиляторов, который компилируется без ошибок и хорошо читается. Ниже я расскажу о «правильных» инструментах, на которые следует обратить внимание.

— 7. Защита от сохранения SWF файла из памяти

Гарантированно защититься от дампа из памяти нельзя. Однако, есть несложный приём, который может усложнить процесс – можно создать множество фальшивых SWF-заголовков (именно по ним обычно ищут SWF файлы в памяти), которые помогут оригинальному SWF затеряться среди них. Чтобы Ваш SWF файл не выделялся на фоне других, можно создать массу фальшивых заголовков с размерами = размерам Вашего SWF файла.
Чтобы заголовки были видны в памяти, достаточно записать их в ByteArray. Вот пример реализации этого способа, вытянутый из загрузчика одного из протекторов:
Как Вы могли догадаться, swfBytes – это массив байт с началом «шаблонного» заголовка и «настройками» для создания «фальшивых» заголовков, а в цикле длина у «шаблонных» заголовков заполняется случайным значением в заданном диапазоне.

— 8. Инструментарий исследователя flash

Основываясь на собственном опыте, я бы порекомендовал эти инструменты (цены указаны на конец 2010 года):

Декомпиляторы:

  • Action Script Viewer (ASV) – умно анализирует код, строит timeline, видит все тэги, очень многое умеет. Стоимость лицензии на одного пользователя – $80.
  • AS3 Sorcerer (от разработчика ASV) – декомпилирует только код, для анализа кода используется движок ASV, работает быстро и очень качественно. Если Вы приобретали ASV в 2010 году, то лицензию на AS3 Sorcerer Вам предоставят бесплатно. Стоимость лицензии с бесплатными обновлениями на 3 месяца — $22.
  • Sothink SWF Decompiler – можно пользоваться на незащищённых проектах, если под рукой не оказалось ASV. Стоимость лицензии — $79.99.

Дизассемблеры (для работы с байткодом):

  • ASV и Sothink умеют показывать байткод, но этого не всегда достаточно.
  • Nemo440 – «Advanced ActionScript 3/ABC2/Flex 2/Flex 3/Flex 4/AIR disassembler». Бесплатен.
  • Yogda – «AVM2 bytecode workbench» – позволяет ассемблировать, патчить байткод, есть встроенная документация по байткоду, иногда падает при анализе защищённых SWF, однако периодически обновляется и обрастает функционалом. Бесплатен.
  • RABCDAsm – «Robust ABC (ActionScript Bytecode) [Dis-]Assembler» – замечательный консольный ассемблер\дизассемблер байткода. Бесплатен (+доступен исходный код).

Протекторы\обфускаторы:

  • secureSWF — из всей массы продуктов этой категории, что мне удалось попробовать, он единственный сумел качественно позаботиться о целостности и работоспособности всех подопытных приложений и при этом качественно выполнить свою основную задачу. Конечно же, не бывает идеальных продуктов в этой области, но secureSWF даёт очень хороший контроль над всем процессом защиты и позволяет тонко настроить различные параметры. Например, Вы можете настроить переопределяющие правила для переименования, установить уровень «замусоривания» кода и т.д. В самой дорогой редакции, Вы получаете также возможность «упаковывать» SWF или привязать её к домену. К сожалению, цена на этот продукт весьма высока: стоимость Standard редакции составляет $199.
  • irrFuscator — может Вам приглянуться за его возможности по обфускации исходного кода перед компиляцией, однако, я считаю, что такой подход значительно хуже по своему качеству, чем байткод обфускация, т.к. не позволяет использовать запрещённые компилятором символы и различные трюки с байткодом. Этот продукт также умеет работать на уровне байткода, но проекты, которые я пробовал им «накрывать» довольно часто оставались неработоспособными. Стоимость Standard редакции составляет 79 евро.
  • OBFU – пожалуй, это самый дорогой обфускатор для flash, который мне доводилось видеть ( стоимость – 1500 евро ). Автор обфускатора — Николя Канасье, создатель haXe. Не ясно – поддерживает ли он AS3, т.к. примеры, выложенные на сайте проекта, написаны на as2 и датированы 2005 годом. К сожалению, попробовать его в действии мне пока не довелось, поэтому если вдруг Вы его когда-то пробовали, то не поленитесь, напишите отзыв о нём в комментариях.

Также прошу обратить внимание, что Amayeta SWF Encrypt, DComSoft SWF Protector, Mochi Encryption – это не то, чем Вам стоило бы «защищать» свои проекты (на данный момент), вы потратите Ваши деньги на бесполезную защиту.
Более того, Вы можете и самостоятельно реализовать простейшую обфускацию, как, например, это сделано в примере от makc3d.

Депротекторы\декрипторы и т.д.:

  • SWF Reader – проект одного польского умельца — многофункциональный редактор, позволяет работать со структурами, тэгами и т.д. Также имеет встроенные декрипторы\депротекторы для некоторых известных продуктов (в частности, распаковщики для doSWF, secureSWF). Cтоимость лицензии – 10 евро.
  • SWF Decrypt – поможет Вам избавиться от Amayeta SWF Encrypt и DComSoft SWF Protector (Mochi Encryption также в планах разработчика). Бесплатен.

Разное:

  • SWiX – отличная утилита для редактирования тэгов SWF файла в удобном XML представлении. Бесплатна.

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

— эпилог

Резюмируя, можно сказать, что, умело пользуясь подручными средствами для защиты своих проектов, Вы сможете отсеять некоторую аудиторию злоумышленников. Однако, если за исследование вашего SWF файла возьмётся профессионал, то, вероятно, он не остановится перед препятствиями и доведёт дело до конца, особенно, если он мотивирован интересной задачей или достаточным денежным вознаграждением. Поэтому всегда здраво оценивайте свой вклад в защиту своих проектов – не тратьте на это слишком много времени и средств, если это того не стоит.
И ещё — не компилируйте SWF с отладочной информацией, т.к. она содержит множество полезных потенциальному взломщику данных, не говоря уже о снижении производительности.

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

Материалы для изучения и источники информации для этой статьи (беспорядочно):

  1. Презентация Claus Wahlers «Hacking SWF» с FITC Amsterdam 2010.
  2. Доклад Симонова Валентина (valyard) «Кто и как взламывает наши игры» с FlashGAMM 2010
  3. Статья Никиты Лещенко на английском о том, как по-простому защитить ресурсы и код, используя шифрование.
  4. Статья от romamik «Защита своими руками».
  5. Статья от Nautilus «Как защитить вашу игру от ребрендинга».
  6. Статья от puzzlesea «Robolander, 25 days later. Защита, борьба с китайцами».
  7. Статья от flashco «Обфускаторы: от бесплатного до €1500».
  8. Alexis’ SWF Reference — описание тэгов всех версий формата, описание заголовка SWF файла и многое другое.
  9. OWASP – в некотором роде вики по вопросам безопасности, относящихся к flash (ссылки на статьи, инструменты и т.д.).
  10. Очень впечатляющая статья о модели безопасности во flash от senocular под названием «Security Domains, Application Domains, and More in ActionScript 3.0».
  11. Статьи от Adobe о безопасности во flash.
  12. Официальная статья от Adobe о безопасности во FP 10 (White Paper).

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

SWFShape::setLine — Sets the shape’s line style

(PHP 5 SWFShape::setLine — Sets the shape’s line style

Описание

Эта функция является ЭКСПЕРИМЕНТАЛЬНОЙ. Поведение этой функции, ее имя и относящаяся к ней документация могут измениться в последующих версиях PHP без уведомления. Используйте эту функцию на свой страх и риск.

swfshape::setline() sets the shape’s line style. width is the line’s w >width is 0, the line’s style is removed (then, all other arguments are ignored). If width > 0, then line’s color is set to red , green , blue . Last parameter a is optional.

You must declare all line styles before you use them (see example).

Возвращаемые значения

Эта функция не возвращает значения после выполнения.

Примеры

This simple example will draw a big «!#%*@», in funny colors and gracious style.

Пример #1 swfshape::setline() example

= new SWFShape ();
$f1 = $s -> addFill ( 0xff , 0 , 0 );
$f2 = $s -> addFill ( 0xff , 0x7f , 0 );
$f3 = $s -> addFill ( 0xff , 0xff , 0 );
$f4 = $s -> addFill ( 0 , 0xff , 0 );
$f5 = $s -> addFill ( 0 , 0 , 0xff );

// bug: have to declare all line styles before you use them
$s -> setLine ( 40 , 0x7f , 0 , 0 );
$s -> setLine ( 40 , 0x7f , 0x3f , 0 );
$s -> setLine ( 40 , 0x7f , 0x7f , 0 );
$s -> setLine ( 40 , 0 , 0x7f , 0 );
$s -> setLine ( 40 , 0 , 0 , 0x7f );

$f = new SWFFont ( ‘Techno.fdb’ );

$s -> setRightFill ( $f1 );
$s -> setLine ( 40 , 0x7f , 0 , 0 );
$s -> drawGlyph ( $f , ‘!’ );
$s -> movePen ( $f -> getWidth ( ‘!’ ), 0 );

$s -> setRightFill ( $f2 );
$s -> setLine ( 40 , 0x7f , 0x3f , 0 );
$s -> drawGlyph ( $f , ‘#’ );
$s -> movePen ( $f -> getWidth ( ‘#’ ), 0 );

$s -> setRightFill ( $f3 );
$s -> setLine ( 40 , 0x7f , 0x7f , 0 );
$s -> drawGlyph ( $f , ‘%’ );
$s -> movePen ( $f -> getWidth ( ‘%’ ), 0 );

$s -> setRightFill ( $f4 );
$s -> setLine ( 40 , 0 , 0x7f , 0 );
$s -> drawGlyph ( $f , ‘*’ );
$s -> movePen ( $f -> getWidth ( ‘*’ ), 0 );

$s -> setRightFill ( $f5 );
$s -> setLine ( 40 , 0 , 0 , 0x7f );
$s -> drawGlyph ( $f , ‘@’ );

$m = new SWFMovie ();
$m -> setDimension ( 3000 , 2000 );
$m -> setRate ( 12.0 );
$i = $m -> add ( $s );
$i -> moveTo ( 1500 — $f -> getWidth ( «!#%*@» )/ 2 , 1000 + $f -> getAscent ()/ 2 );

header ( ‘Content-type: application/x-shockwave-flash’ );
$m -> output ();
?>

Возвращаемые значения

Эта функция не возвращает значения после выполнения.

Как открыть файл SWF

SWF – это особый формат, разработанный специально для веб-приложений и использования в интернет-среде. Это формат для хранения различного рода анимации, графического контента и даже коротких видео и аудио файлов небольшого объёма.

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

Аббревиатура «swf» изначально расшифровывалась как «ShockWave Format». Теперь, для того, чтобы не было путаницы с другими флеш-приложениями, этот формат называется «Small Web Format» (маленький веб-формат).

Как и чем открыть SWF?

К сожалению, открыть данный файл с помощью стандартных средств просмотра изображений Windows не представляется возможным. Тут ситуация очень схожа с форматом «GIF», который хоть и отображается как изображение, но запустить анимацию нельзя. Так чем же всё-таки можно просмотреть такого рода файлы?

Браузеры

Первый и самый простой способ, абсолютно не требующий дополнительной установки каких-либо средств – открыть нужный файл в любом браузере. Практически все современные средства для интернет-серфинга предусматривают поддержку технологии «Flash».

Запустить swf-файл используя браузер просто:

    Дважды кликните на необходимом swf-файле.

Готово! Браузер откроет наш файл, и впредь все swf-файлы будут ассоциироваться с данной программой.

Adobe Flash Player

Второй доступный и очевидный вариант – использовать программные продукты от «Adobe», так как именно эта компания на данный момент – основной разработчик любого ПО с технологией Flash. Самый распространённый продукт, который есть у каждого – Flash Player.

Итак, чтобы открыть данный тип файлов в этой программе необходимо:

    Открыть Adobe Flash Player, используя ярлык на рабочем столе или через меню «Пуск». В окне программы открываем функцию верхней панели «File» («Файл»), в открывшемся подменю выбираем «Open» («Открыть»).

Готово! Файл откроется и будет воспроизведён Flash Player-ом.

На заметку! Ещё один более быстрый способ – выделить необходимый файл и нажать правой клавишей мыши. В контекстном подменю выбрать подпункт «Открыть с помощью» («Open with»), и уже в нём выбрать Флеш-плеер.

С помощью медиаплеера

Для этого способа подойдёт любой проигрыватель видео для Windows – самый популярный KMPlayer, распространённый VLC media player, или чуть менее известный GOM player. Впрочем, список подходящих программ достаточно велик.

Разберём на примере KM-плеера. Последовательность действий проста:

    Запускаем КМПлеер. Важно открыть именно саму программу, а не конкретный файл. Так будет удобнее, и это поможет избежать вылетов.

На заметку! Также можно запустить файл в плеере, используя контекстное меню. Однако это сработает только в том случае, если программа присутствует в данном подменю.

Видео — Чем открыть файл SWF

Понравилась статья?
Сохраните, чтобы не потерять!

CSS Shapes

Прямоугольники внутри прямоугольников: это то, из чего состоят веб-страницы. Мы долго пытались вырваться из этих ограничений с помощью CSS для создания геометрических фигур, но форма этих фигур никогда не влияла на форму укладки контента внутри элемента, или на то, как элемент соотносится с другими элементами страницы.

Новая спецификация CSS Shapes меняет такое положение вещей. Представленная в середине 2012 года компанией Adobe , она имеет своей целью предоставить веб-дизайнерам новые возможности размещения контента, который теперь может обтекать сложные геометрические фигуры, как изнутри, так и снаружи — чего мы раньше не могли сделать даже с помощью JavaScript .

Например, обратите внимание, как текст обтекает круглое изображение в этом макете. Без Shapes , текст был бы просто прямоугольным блоком — возможность взаимодействия со сложными фигурами действительно открывает перед дизайнерами новые горизонты:

Давайте рассмотрим, как работает Shapes , и как вы можете начать его использовать.

Поддержка браузерами

В настоящее время CSS Shapes поддерживается только в Webkit Nightly и Chrome Canary , но его Модульный уровень 1 получил статус « рекомендовано к рассмотрению », то есть свойства и синтаксис, определенные в спецификации, вполне стабильны.

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

В частности, здесь определено свойство shape-outside и связанные с ним другие свойства. В сочетании с другими новейшими функциями, такими как Обрезка и наложение , CSS-фильтры , и Компоновка и взаимодействие , CSS Shapes позволят нам создать более сложные конструкции, не прибегая при этом к помощи графических редакторов, таких как Photoshop или InDesign .

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

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

Когда же будут реализованы свойства CSS Shapes shape-inside , мы сможем сделать блок самого контента также ромбическим, и такие макеты, как тот, что приведен ниже, станут вполне возможны:

Сегодня для того чтобы использовать CSS Shapes в Chrome Canary , вы должны с помощью специальной опции разрешить использование экспериментальных функций. Если вы не уверены, как это делается, посмотрите эту пошаговую инструкцию в блоге Adobe .

Создание CSS Shape

Вы можете применить форму к элементу с помощью одного из свойств Shapes. Вы передаете свойство фигуры в функцию Shapes в качестве значения. Функция фигуры, это то куда вы передаете аргументы, определяющие фигуру, которую вы хотите применить к элементу:

Фигуры могут быть созданы с помощью одной из следующих функций:

Каждая фигура определяется набором точек. Некоторые функции принимают точки в качестве параметров; другие принимают смещения — но все они в конечном итоге рисуют фигуры в виде набора точек. Мы рассмотрим параметры для каждой из этих функций в приведенных ниже примерах.

Фигура также может быть определена путем ее извлечения из изображения с помощью альфа-канала. Когда изображение передается в свойства фигуры, браузер извлекает фигуру из картинки, используя shape-image-threshold . Форма определяется пикселями, чьи альфа-значения больше, чем пороговое значение.

Изображение должно быть совместимо с CORS . Если предоставляемое изображение по какой-либо причине не может быть отображено (например, если оно не существует), то не будет применяться ни одна из фигур.

Список свойств фигуры, которые принимают указанные выше функции в качестве значений:

  • shape-outside : укладывает контент вокруг (вне) фигуры;
  • shape-inside : укладывает контент внутри фигуры.

Вы можете использовать свойство shape-outside в сочетании со свойством shape-margin, чтобы добавить отступ от краев фигуры, этот отступ отодвинет текстовый контент от границ фигуры, создавая между ними свободное пространство. Аналогично сочетание свойств shape-inside и shape-padding отодвигает контент от границ фигуры изнутри, создавая внутренний отступ.

С помощью свойств и функций фигур, объявить фигуру, применяемую к элементу, можно одной строкой CSS -кода:

Даже если вы примените этот CSS -код к элементу, форма не будет применена, если не будут выполнены два условия:

  • Элемент должен быть плавающим. Будущие уровни CSS Shapes предоставят нам возможность определять фигуры и для не плавающих элементов, однако пока мы не можем сделать это;
  • Элемент должен иметь внутренние размеры. Высота и ширина, установленные в элементе, будут использоваться для создания системы координат этого элемента.

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

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

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

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

Исходный бокс Shapes

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

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

Ключевое слово padding-box в приведенном выше коде указывает, что форма применяется, и она ограничивается боксом заполнения (областью заполнения) элемента. Функция circle() определяет фигуру круга, его размер и положение в элементе.

Определение Shapes с помощью функции фигуры

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

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

Вы можете спросить: « Почему бы не использовать border-radius для круглого изображения? » Ответ таков — свойство border-radius не влияет на обтекание контентом внутри или вокруг элемента, к которому применяется — оно не влияет на область контента внутри элемента или обтекание областью контента вокруг элемента. Оно влияет только на границы элемента и фоны.

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

Мы используем свойство border-radius , чтобы сделать изображение круглым, таким образом, мы обычно и придаем круглую форму изображениям или другим элементам страницы:

В браузере, который не поддерживает CSS Shapes , контент вокруг круглого изображения будет обтекать его так, как будто оно вовсе не имеет круглую форму. Это будет нашим запасным вариантом для старых браузеров.

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

С помощью этого кода текст будет « видеть » круглую фигуру, примененную к изображению и укладываться вокруг него, как это было показано на первом скриншоте. (Сам результат вы можете увидеть здесь .) В браузерах, не поддерживающих Shapes , будет применяться код, который выводит контент так, как показано на втором скриншоте.

Вы можете использовать функцию circle() , как есть, или путем передачи в нее параметров. Ее официальный синтаксис следующий:

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

Вы можете указать радиус окружности, используя любые единицы длины ( px , em , pt и т.д.) Вы также можете указать радиус, используя либо furthest-side , либо closest-side , но по умолчанию используется параметр closest-side , что означает, что браузер будет использовать расстояние от центра элемента до ближайшей к нему стороны, как длину радиуса. farthest-side использует расстояние от центра до самой дальней стороны элемента:

Функция ellipse() действует так же, как функция circle() , с теми же значениями, за исключением того, что вместо одного параметра радиуса, она принимает два: один для длины радиуса по оси х , второй — по оси у :

Функция inset() напрямую не связана ни с кругом, ни с эллипсом, она используется для создания прямоугольных фигур внутри элемента.

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

Функция inset() принимает от одного до четырех значений смещения, которые определяют смещения внутри от краев исходного бокса. Они определяют, где прямоугольник будет размещен внутри элемента.

Функция также принимает необязательный параметр степени закругления углов вставляемого прямоугольника. Закругленные углы задаются точно так же, как border-radius , с использованием от одного до четырех значений, в сочетании с ключевым словом round :

Следующий код будет создавать прямоугольник с закругленными углами для плавающего элемента:

Реальный пример вы можете увидеть здесь .

И еще одна функция Shape — polygon() , она определяет более сложные произвольные фигуры, используя любое количество точек. Функция принимает набор пар координат, каждая из которых указывает положение одной точки. Множество точек в совокупности определяют фигуру.

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

CSS для приведенного выше изображения выглядит следующим образом:

Вы можете установить координаты точек, определяющих форму, в единицах длины или процентах, как в данном случае.

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

В самом деле, применение функции фигуры к элементу — изображению, контейнеру или чему-то среднему — не влияет ни на что, кроме обтекания текстом обозначенной области фигуры. Фон, границы и все остальное остаются неизменным.

Для того чтобы визуализировать форму многоугольника, который мы создали, мы должны « обрезать » части изображения вне этой фигуры. В этом нам поможет свойство clip-path из CSS Masking Module .

Свойство clip-path принимает те же функции фигуры и значения, что и свойства фигуры. Если мы передадим в свойство clip-path ту же фигуру многоугольника, которую мы использовали в свойстве shape-outside , мы обрежем все части изображения, которые находятся вне определенной фигуры:

Результат будет следующим:

Свойство clip-path на сегодняшний день поддерживается с помощью префиксов, поэтому оно работает в Chrome через добавление к свойству префикса -webkit- . Реальный пример вы можете увидеть здесь .

Свойство clip-path прекрасно сочетается со свойствами фигур, так как оно помогает визуализировать созданные фигуры и обрезать все части элемента, которые находятся вне определенных форм. Поэтому вы, вероятно, найдете его полезным для себя и будете часто использовать его вместе со свойствами Shapes .

Функция polygon() также может принимать (необязательно) ключевые слова nonzero или evenodd . С их помощью указывается, как располагаются относительно друг друга области внутри фигуры многоугольника, которые имеют пересекающиеся сектора.

Больше об этом вы можете узнать в разделе свойства SVG fill-rule .

Определение фигуры с помощью изображения

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

Фигура определяется пикселями, чьи альфа-значения больше, чем определенное крайнее значение. Этот порог по умолчанию равен 0,0 (полностью прозрачный), или вы можете установить собственное значение с помощью свойства shape-image-threshold . Таким образом, любой непрозрачный пиксель будет использоваться как часть определенной формы из изображения.

Будущие уровни CSS Shapes смогут определять переходы, используя данные яркости изображения, вместо альфа-данных. Если это произойдет, shape-image-threshold сможет использовать или альфа-данные, или яркость, в зависимости от состояния переключателя.

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

С помощью свойства shape-outside со значением url() , указывающим на это изображение фотографии, мы можем задать обтекание контентом вокруг элемента в форме листа:

Конечно, если бы вы применяли к элементу фон, его нужно было бы обрезать вне определенной фигуры. Так как clip-path не принимает альфа-изображение в качестве значения, это можно сделать с помощью свойства mask-image (с соответствующими префиксами) из Masking Module . Результат выглядит следующим образом:

Если вы создаете сложные фигуры, вы, возможно, захотите определить форму, используя изображение. Это позволит использовать альфа-канал изображения в Photoshop , вместо того, чтобы вручную определять точки.

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

CSS Shapes в адаптивном дизайне

Может ли CSS Shapes использоваться в процессе разработки адаптивного дизайна? Текущая спецификация уже охватывает shape-outside , и так как мы можем указывать размеры элемента не только в различных единицах длины, но и в процентах, мы смело можем этим пользоваться.

Это означает, что элемент с заданной shape-outside будет полностью адаптивным, как и любой другой плавающий элемент с размерами, заданными в процентах.

shape-inside пока еще не является адаптивной, но это только потому, что данный вопрос специально реализуется в Модульном уровне 2 , многие из нынешних ограничений будут решены в следующем уровне.

Инструменты Shape

Создание сложных форм с помощью функций фигур может оказаться непростой задачей, особенно если вы при помощи функции polygon() создаете фигуру, состоящую из множества точек, каждая со своими координатами. К счастью, команда веб-платформы компании Adobe работает над развитием интерактивного инструментария, что сделает многие вещи гораздо проще.

Беар Трэвис создал коллекцию Shape Tools , которая позволяет визуально задавать многоугольные фигуры. Затем инструмент автоматически генерирует для нас функцию фигуры. Это довольно удобно, но данные инструменты имеют определенные ограничения.

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

Более продвинутый и гибкий инструмент Shapes был разработан командой Adobe Web Platform . Инструмент был недавно выпущен в качестве расширения для бесплатного редактора Brackets компании.

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

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

В правой части окна браузера осуществляется редактирование фигуры, а слева сразу интерактивно отображается код:

Этот инструмент станет для вас незаменимым, потому что он облегчает создание, редактирование и отладку фигур. Разван Калиман написал статью в блоге Brackets , из которой вы можете получить представление о том, как вам установить и начать использовать редактор Shapes в Brackets .

Будущее: CSS Exclusions

Спецификация CSS Shapes раньше использовалась и как спецификация CSS Shapes , и как Exclusions , но позже они были разделены.

В то время как CSS Shapes определяет свойства shape-inside и shape-outside , CSS Exclusions будет определять свойства, которые позволяют нам уложить контент вокруг элементов, которые не являются плавающими, например, элементов с заданным абсолютно расположением.

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

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

Подобные макеты с элементами определенной формы расположенными по центру статьи — с текстом, обтекающим их со всех сторон — также будут возможны.

Дальнейшее развитие Shapes

Текущая спецификация CSS Shapes — это лишь первый шаг. Вскоре новые опции предоставят нам больше контроля при создании фигур и укладке контента в и вокруг них. Что в свою очередь облегчит превращение макетов в интерактивные конструкции с помощью всего нескольких строк кода.

Сегодня редакторы спецификации ориентированы на работу с shape-outside , и еще до конца 2014 года мы, вероятно, увидим широкое применение CSS Shapes .

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

Вы также можете расширить тест Modernizr с помощью этого скрипта , чтобы проверить поддерживается ли shape-outside или скачать пользовательские сборки, включающие этот скрипт.

CSS Shapes еще больше приблизит веб-дизайн к полиграфии. Примеры, приведенные в этой статье, довольно просты, но они позволят вам создавать конструкции, настолько же сложные, как и в иллюстрированных журналах или на плакатах — все это вы сможете воссоздать на экране.

Что бы вас не заинтересовало — макеты неправильной формы или анимированные Shapes — пришло время попробовать их на практике и поэкспериментировать.

Данная публикация представляет собой перевод статьи « CSS Shapes 101 » , подготовленной дружной командой проекта Интернет-технологии.ру

Способы вставки Flash в HTML и XHTML

«Как правильно вставить объекты Flash в вашу HTML-страницу?»

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

Основные компоненты метода встраивания Flash-объектов

Прежде чем перейти к практике, давайте сначала охарактеризуем идеальный метод. По моему мнению, следующие критерии имеют первостепенное значение.

Соответствие стандартам

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

Межбраузерная поддержка

Поддержка всеми основными браузерами и популярными операционными системами — это необходимое условие. Проверить разметку можно с помощью инструментария Flash embed test suite, который позволяет оценить, поддерживают ли браузеры тот или иной метод разметки, с помощью которой можно вставить Flash-объекты. Этот набор тестов может показать информацию о параметрах, в том числе различных настройках Flash, потоках и сценариях, поддерживаемых браузерами и ОС. Вы также можете изучить сводную таблицу, отображающую эти параметры.

Поддержка альтернативного содержимого

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

Избежание несоответствия между Flash-контентом и версией Flash-плеера

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

Автоактивация интерактивного контента

Браузеры компании Microsoft работают так, что посетители не могут напрямую взаимодействовать с элементами управления Microsoft ActiveX, который позволяет загружать объекты и элементы embed , также называемые «интерактивным контентом».

Короче говоря, браузеры Microsoft не позволят взаимодействовать с интерактивным контентом, пока пользователь самостоятельно его не активирует. Opera также внедрила похожий механизм «click-to-activate». Этот механизм работает как «лежачий полицейский» на дороге: вы должны приостановить движение, медленно переехать через него, и только потом нажать педаль газа. Это может запутать обычного интернет-серфера и разозлить даже самого опытного.

Простота реализации

Конечно же простота имеет значение. Зачем прыгать выше головы, если можно сделать проще?

Основы встраивания Flash-объектов: embed и object

Существуют два элемента HTML, которые позволяют вставить объекты Flash на веб-страницу. В одной руке, у нас есть запатентованный элемент embed , который поддерживается большинством браузеров:

В другой руке у нас элемент object , который является рекомендацией W3C. Так как спецификации W3C предоставляют больше возможностей для отображения подключаемого контента, со временем появились два различных способа реализации объектов.

Большинство современных браузеров выбрали стандартом альтернативу тегу embed , используя при этом MIME-тип объекта, чтобы подключить соответствующий плагин для воспроизведения содержимого:

Этот метод не привязан к какому-либо определенному браузеру и поэтому это предпочтительная реализация.

Второй способ реализации создан специально для Internet Explorer на Windows. При этом требуется, чтобы вы определили атрибут classid у объекта, чтобы браузер смог загрузить необходимый элемент управления ActiveX Flash-плеера. Такой способ допустим, но зависим от типа браузера:

Замечание: В двух последних примерах кода специально не указан параметр codebase — он часто используется, чтобы уточнить URL инсталлятора Flash на серверах Adobe (браузер может автоматически загрузить его, если он еще не установлен). Однако это запрещено согласно спецификациям, которые ограничивают его доступ только в пределах домена текущего документа, и поэтому этот параметр не поддерживается всеми современными браузерами.

Почему embed все еще используется

С появлением веб-стандартов можно было бы совершенно обоснованно удалить элемент embed . Он просто никогда не был рекомендацией W3C и никогда не будет, потому что он уже запатентован. Однако в действительности этот способ лучше поддерживается браузерами, чем отдельная реализация элемента object . В результате такой способ реализации выбран на большинстве веб-сайтов, таких как Google Video и Brightcove.

Хотя веб-стандарты созданы, чтобы избежать проблем совместимости, элемент embed более ясен и недвусмыслен, чем элемент object , одобренный W3C. Жесткие правила реализации элемента embed и хорошая поддержка превратила его в фактический стандарт, который будет использоваться до тех пор, пока не будет универсальной поддержки элемента object , достаточной для того, чтобы игнорировать версии браузеров, которые его не поддерживают.

Где нарушена поддержка веб-стандартов

Двойственная реализация элемента object формально не нарушает веб-стандарты, но создает множество проблем. Следовательно, нам нужно найти способ объединить два метода реализации объектов в один. Еще хуже то, что мы также должны разобраться с браузерами, которые имеют (или раньше имели) неправильную реализацию объектов. Давайте рассмотрим эти проблемы:

  • Общая реализация объектов не работает в Internet Explorer на Windows. IE загружает плагин и SWF-файл, но не показывает его содержимое.
  • Когда мы частично объединяем два способа реализации добавлением параметра movie к общей реализации, Internet Explorer отображает Flash-контент, но не проигрывает его.
  • Если мы полностью соединим две реализации, все заработает в Internet Explorer, но браузеры на базе Gecko проигнорируют Flash-контент и покажут альтернативное содержимое.

Одной из особенностей элемента object является то, что вы можете вставлять этот тег друг в друга:

К сожалению, из-за ошибки в старых версиях Internet Explorer встроенные друг в друга элементы object рассматриваются так, как будто они следуют один за другим, поэтому отображаются оба элемента.

Еще хуже то, что браузеры Safari, начиная с версии 1.2.2 для Mac OS 10.3, игнорируют элемент param , встроенный в object , хотя поддерживают такие же атрибуты для элемента embed .

Замечание: Вы также можете спросить, насколько разумно определять контент, атрибуты и параметры дважды, как в вышеизложенном способе. Этот комбинированный метод также делает более проблематичным использование JavaScript для взаимодействия с Flash-контентом. В таком случае вы должны проверять, с каким объектом вы взаимодействуете.

Некоторые из ошибок уже исправлены, но необщепринятая и ошибочная в Internet Explorer реализация object все еще сдерживает абсолютное принятие этого элемента. Мы можем только надеяться, что это будет исправлено в ближайшем будущем.

Почему object лучше, чем embed

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

Элемент object позволяет встраивать альтернативное содержимое, и это содержимое отображается, если реализация не поддерживается или не установлен плагин. Также альтернативное содержимое доступно поисковым машинам, а это неоспоримый плюс при оптимизации под поисковые запросы.

Элемент embed поддерживает альтернативное содержимое посредством элемента noembed , но такая реализация работает только в тех браузерах, которые не поддерживают сам элемент embed , например Internet Explorer на платформах Windows Mobile. В отличие от элемента object , embed не поддерживает альтернативное содержимое, когда поддерживается сам элемент embed , но не установлен Flash-плагин. В такой ситуации, можно довольствоваться только атрибутами pluginurl и pluginspage , с помощью которых отображается картинка, кликнув по которой можно установить плагин.

Я думаю, это лучшее решение для отображения альтернативного контента, чтобы описать необходимый плагин и дать намек на то, что пользователь может загрузить и установить плагин Flash. (Тем не менее, нет других причин, по которым мы должны злоупотреблять атрибутом codebase .)

Таким образом, элемент object обладает значительными преимуществами перед элементом embed в том случае, если вы предпочитаете создавать соответствующий стандартам код или доступное, хорошо индексируемое поисковиками содержимое.

Недостаточность методов разметки

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

Хотя разметка предоставляет средства показа Flash-контента или альтернативного содержимого, она не способна решить проблемы несоответствия контента и плагина Flash или ошибки при активизации интерактивного контента, и это не всегда самый простой способ решить и ту, и другую проблему.

Однако, давайте сделаем краткий обзор наиболее популярных «комбинированных» методов встранивания Flash, осуществляемых с помощью (X)HTML-разметки.

Двусоставный метод

В Flash IDE, вы можете создавать HTML-страницы с помощью так называемого двусоставного метода, объединяющего реализацию объектов с помощью элемента object и embed , встроенного внутри него как альтернативный контент:

Как видите, этот метод основан исключительно на запатентованной разметке. Он несомненно фокусируется на межбраузерной поддержке, но не соответствует стандартам.

Двусоставный метод использует избыточный код, делает ваши веб-страницы логически непоследовательными и не позволяет вставить альтернативное содержимое. А единственная преимущество — это простота в использовании, так как его генерирует Flash IDE: так что не пытайтесь просить воспроизвести этот метод по памяти.

Метод вложенных объектов

Вложение двух реализаций объектов — хорошая альтернатива двусоставному методу, потому что этот метод соответствует стандартам и поддерживает альтернативный контент:

К сожалению, в этом методе отсутствует межбраузерная поддержка вследствие ошибки вложения элементов object в IE и отсутствия поддержки вложенных элементов param в Safari. Но можно использовать прием с условными комментариями IE, чтобы избежать ошибок браузера:

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

Flash Satay

Другая альтернатива — это метод Flash Satay, который основан на общем способе реализации объектов и включает дополнительный параметр movie . Этот параметр необходим, чтобы избежать ошибок отображения контента в IE. Он также включает movie-контейнер Flash (c.swf с переменной path), чтобы исправить ошибку с потоковым воспроизведением в IE:

Хотя он приближает нас к «идеальному», универсальному способу реализации объектов, Flash Satay содержит приемы, применение которых не подойдет каждому? и при использовании этого метода встроенные элементы param не поддерживаются старыми версиями Safari.

Аргументы в пользу DOM

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

  • специальную реализацию для IE;
  • запатентованный элемент embed для старых версий Safari;
  • общую реализацию для всех остальных браузеров.

Скрипт DOM к тому же гибкий инструмент, достаточный для решения остальных проблем: прежде всего, мы можем использовать его для решения проблемы несовместимости Flash-плейера и Flash-контента, определяя версию плагина и проверяя то, что нужно показывать — Flash-контент или альтернативное содержимое. Когда необходимая версия плагина недоступна, мы можем инициировать экспресс-установку Adobe, — механизм встроенный в Flash-плейер. Тем самым мы упрощаем загрузку нужной версии.

Решение с применением DOM также позволяет нам избежать механизма «click-to-activate» с помощью динамического создания элементов object .

Будьте осторожны, используя JavaScript

Так как не каждый является опытным специалистом по JavaScript — да и даже тот, кто им является, не должен заново изобретать велосипед — неплохо использовать уже существующие библиотеки JavaScript для встраивания Flash. Давайте рассмотрим критерии выбора надежной библиотеки.

Разметка по стандартам редко поддерживается создателями библиотек, так как эти библиотеки определяют Flash-контент либо в JavaScript, либо другими средствами разработки. Большинство библиотек создают неправильный HTML и, так как разметка написана динамически, W3C-валидатор не способен её проверить.

С другой стороны нужно рассмотреть, как работает такой метод, если JavaScript не доступен, не поддерживается или поддерживается только отчасти. Что делать, если используя JavaScript, вы ограничиваете доступность контента для пользователей?

Приняв во внимание вышесказанное, давайте посмотрим, как работают некоторые популярные библиотеки.

Комплект по определению плейера Adobe Flash

Кроме создания разметки в Flash IDE, Adobe также предоставляет комплект по определению плейера Flash. Существует три способа использовать этот комплект:

  1. Проверив установлен или нет флажок Detect Flash Version (в меню File > Publish Settings > HTML) в Flash 8 IDE.
  2. Вставив его вручную, загрузив дистрибутив этой библиотеки.
  3. Работать в Flex Builder 2, где он включен по умолчанию.

Хотя пакет дает нам все желаемые возможности, такие как определение версии, экспресс-установка и автоактивация интерактивного контента, он нуждается в усовершенствовании. Когда мы полностью перейдем к стандартам, его ждет безнадежный провал: пока что он основан на двусоставной разметке, так как имеет либо реализацию объектов от Microsoft, либо поддержку запатентованного элемента embed , не соответствующего стандартам.

Он также поддерживает альтернативный контент, хотя странным и противоречивым образом. Вы должны определить альтернативный контент дважды: в JavaScript и в элементе noscript .

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

UFO и SWF Object

Популярные альтернативы с открытым исходным кодом, как UFO Боба ван дер Слуиса и SWF Object Джеффа Стирнса наверное самые полные и простые в использовании библиотеки, доступные в настоящее время.

Хотя на первый взгляд они кажутся похожими, они полностью отличаются внутренним содержанием. Например, SWF Object использует двусоставный метод Adobe, в то время как UFO генерирует главным образом соответствующую стандартам разметку. С другой стороны они используют общие архитектурные принципы: обе библиотеки построены на идее создания разметки, поддерживающей альтернативное содержимое (таким образом доступное и оптимизированное под поисковики), которое замещается DOM-скриптом, когда доступна необходимая поддержка Flash и JavaScript.

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

Аргументы в пользу «умеренного» программирования DOM

Чтобы решить все проблемы, вполне логично использовать следующий метод вставки: смешанную разметку, совместимую со стандартами, как та, которая используется методом Flash Satay, чтобы включить и Flash-контент, и альтернативное содержимое, наряду с применением небольшого DOM-скрипта, который необходим для устранения проблем в некоторых браузерах.

ObjectSwap основан на этих принципах и на мой взгляд является образцом для будущих библиотек встраивания Flash-объектов. К сожалению, ObjectSwap концентрируется в основном на автоактивации интерактивного контента, поэтому он не пригоден для определения версии и не решает проблем с разметкой, таких как поддержка потокового воспроизведения в IE или поддержка параметров в старых версиях Safari.

С другой стороны он может быть усовершенствован. При использовании события onload , поведение, основанное на DOM, реализуется только после загрузки всей страницы. Лучшим выбором могло бы быть событие DOMContentLoaded , которое позволяет вам применить свое собственное поведение, как только DOM станет доступен на странице. Так как событие DOMContentLoaded еще не полностью поддерживается браузерами, взамен этого вы можете использовать это решение.

Будущее встраивания Flash

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

Обзор программ для работы с Flash-технологией

ак известно, Macromedia Flash дает разработчику возможность хранить информацию в виде исходных файлов (файлы с расширением FLA), в которых видна структура разработки (информация о слоях и т.п.), и в виде компактных SWF-файлов, которые содержат минимум информации и предназначены для размещения в Сети. Во FLA-файлах содержится ноу-хау разработчика, поэтому FLA-файлы выкладываются в Сеть только в том случае, если автор хочет поделиться своими знаниями. После того как автор компилирует исходный FLA-файл в SWF-файл, вся избыточная информация, в том числе и информация о структуре документа, пропадает. SWF-файл можно импортировать во Flash, но при этом не удастся восстановить структуру документа без специального дополнительного ПО. Более того, если автор не хочет, чтобы его творение кто-то импортировал во Flash с целью извлечения доступных для редактирования ресурсов, то на стадии компиляции автор может задать пароль, который предотвратит импортирование SWF-файла во Flash.

То, что одни пользователи хотят защитить свои ресурсы, а другие, наоборот, вскрыть их, привело к появлению целого ряда программ, содержащих средства снятия защиты (и установки собственной), извлечения ресурсов и декомпиляции кода Action Script.

Современный Action Script является полнофункциональным языком программирования, позволяющим описывать весьма сложные сценарии, поэтому в случае потери кода восстановление его занимает довольно много времени, а программа-декомпилятор позволяет существенно снизить временные затраты при восстановлении утраченного кода. Одни пользователи используют такие программы, чтобы восстановить собственные ресурсы, другие — чтобы усовершенствовать свои навыки программирования во Flash на чужих примерах, а третьи — чтобы присвоить чужие ресурсы. Теоретически возможна ситуация, когда автор потерял свой исходный FLA-файл и ему нужна программа-декомпилятор, однако в подавляющем большинстве случаев эти программы используются для ознакомления со структурой чужой разработки и для экспорта чужих ресурсов.

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

Action Script Viewer 4.06

Разработчик: Manitu Group (http://www.manitugroup.com)

Размер дистрибутива: 1286 Кбайт

Способ распространения: shareware

Цена: 59,95 долл.

Работа под управлением: Windows 95/98/Me/NT/2000/XP

По всей видимости, Action Script Viewer — наиболее мощное приложение из нашего обзора. Программа позволяет извлекать различные типы ресурсов из одного или нескольких SWF-файлов в пакетном режиме. Все символы и слои могут быть сохранены как отдельные SWF-файлы. Растры могут быть извлечены в виде JPG/PNG-файлов, а звуки — в виде WAV/MP3-файлов. Программа позволяет открывать SWF-файлы, внедренные в EXE-проекторы, менять базовые параметры кадра (такие как размер окна и скорость смены кадра) и многое другое. Поддерживаются SWF-версии 3, 4, 5, MX и MX 2004. Наглядное представление о работе программы дает вид панели Timeline View Tab, которая показывает внутреннюю структуру реконструированных слоев (рис. 1).

Рис. 1. Панель Timeline View Tab позволяет реконструировать слои

Информация об SWF-файле может быть представлена в разном виде. Например, панель Frames Pane (рис. 2) дает сведения о каждом кадре, а панель Action Script Pane (рис. 3) отображает декомпилированный Action Script для выделенного в текущий момент объекта.

Рис. 2. Панель Frames Pane

Рис. 3. Action Script Pane

Action Script Replacer 1.0

Разработчик: Manitu Group (http://www.manitugroup.com/)

Размер дистрибутива: 581 Кбайт

Способ распространения: по Сети не распространяется

Цена: бесплатно для пользователей Action Script Viewer и URL Action Editor

Работа под управлением: Windows 95/98/Me/NT/2000/XP

Action Script Replacer (рис. 4) — это инструмент, позволяющий импортировать Action Script из одного SWF-файла для замены скрипта в другом SWF-файле. При этом приложение умеет открывать SWF-файлы, внедренные в EXE-проекторы.

Рис. 4. Интерфейс программы Action Script Replacer

Программа позволяет просматривать все скрипты в SWF-файле (поддерживаются SWF-версии 6/MX и ниже). Action Script Replacer дает возможность внедрять и добавлять Action Script кадра на другой кадр любой временной шкалы (Тimeline), добавлять кадры в любые временные шкалы, просматривать и модифицировать такие базовые параметры, как частота смены кадров, цвет фона и т.п.

Flare 0.5

Разработчик: Nowrap (http://www.nowrap.de)

Размер дистрибутива: 96 Кбайт

Способ распространения: freeware

Цена: бесплатно

Работа под управлением: Windows All, Mac OS X и Linux

Flare — это бесплатный Action Script-декомпилятор, позволяющий извлекать из SWF-файла все скрипты и представлять их в одном текстовом файле. Приложение поддерживает последнюю версию Flash MX 2004.

После инсталляции Windows-версии достаточно щелкнуть правой кнопкой мыши на любой SWF-файл в Windows Explorer, выбрать Decompile из контекстного меню — и Flare обеспечит декомпиляцию SWF-файла в обычный текстовый файл. В дальнейшем текстовый файл можно открыть в любом текстовом редакторе. Если при декомпиляции возникнут какие-либо проблемы, Flare выдаст предупреждение.

MAC OS X- и Linux-версии представляют собой приложения в виде командной строки.

Следует отметить, что Flare экспортирует только Action Script, но не умеет извлекать графику, звуки и т.п. — в отличие от многих программам данного класса.

Flash Decompiler 1.3

Разработчик: Eltima Software (http://www.show-kit.com)

Размер дистрибутива: 3224 Кбайт

Способ распространения: shareware

Цена: 39,95 долл.

Работа под управлением: Windows 95/98/Me/NT/2000/XP

Flash Decompiler — одно из наиболее быстрых и надежных средств извлечения исходных ресурсов из SWF-файлов (рис. 5). Последняя версия 1.30 появилась совсем недавно — 24 мая текущего года. Программа проста в работе: одним щелчком мыши можно извлекать и сохранять звуки, изображения, кнопки, формы, шрифты, тексты, элементы Action Script из любого SWF-файла на жесткий диск. Наглядный поэлементный предпросмотр (рис. 6), дружественный интерфейс с поддержкой скинов, возможность проигрывать SWF-файлы непосредственно во Flash Decompiler, поддержка компрессии SWF-файлов и всех версий Flash — все это делает инструмент удобным и востребованным.

Рис. 5. Flash Decompiler позволяет извлечь ресурсы из SWF-файла одним щелчком мыши

Рис. 6. Программа дает возможности легко извлекать и хранить звуки, изображения, формы, шрифты, кнопки, тексты и т.п.

Gordon 1.3.1

Разработчик: FutureCandy (http://www.futurecandy.com)

Размер дистрибутива: 503 Кбайт

Способ распространения: shareware

Цена: 59 долл.

Работа под управлением: Mac OS 10.1 и выше, совместима с10.2 Jaguar

Gordon — один из немногих SWF-декомпиляторов, работающих под управлением Mac OS X. Недавно программа была обновлена до версии 1.3.1, в которой поддерживается новый стандарт Action Script 2.0.

Программа предоставляет следующие возможности:

• редактирование, экспорт и импорт ресурсов SWF-файла;

• экспорт в PDF и TIFF;

• предпросмотр извлекаемых ресурсов;

• поддержка Flash 3, 4, 5, MX и MX 2004;

• разделение мувиклипов, внедренных в один SWF-файл;

• обновление ранее опубликованных SWF-файлов в компрессированный или некомпрессированный MX-формат;

• установка и снятие защиты на SWF-файлы, изменение размеров кадра фильма, цветового фона, частоты смены кадров без доступа к FLA-файлу;

• шкала Тimeline позволяет просматривать все кадры одновременно.

INPERATOR FLA 1.6

Разработчик: Imperator GbR (www.ave-imperator.com)

Размер дистрибутива: 1071 Кбайт

Способ распространения: shareware

Цена: 79 евро

Работа под управлением: Windows 95/98/Me/NT/2000/XP

IMPERATOR FLA (рис. 7) генерирует FLA-файлы (читаемые посредством Flash MX(6) или выше) на базе SWF-файлов (скомпилированных при помощи Macromedia Flash) и таким образом позволяет изменять содержание SWF-файла даже тогда, когда соответствующий FLA-файл утерян. Программа дает возможность извлекать включенные в файл медиаресурсы (картинки, звуки, видео) и редактировать их в сторонних программах.

Рис. 7. Интерфейс программы IMPERATOR FLA

В перечень восстанавливаемых объектов входят скрипты, кнопки, параметры кадра (фон, скорость смены кадров, размеры кадра и т.п.), картинки разных типов, формы, звук, мувиклипы (MovieClips), текстовые поля и видео. Все эти ресурсы программа реорганизует во FLA-совместимом виде (FLA-compatible terms). Для того чтобы извлечь медиаресурсы, достаточно выбрать пункт Media-Extraction и определить тип извлекаемого ресурса (рис. 8).

Рис. 8. Функция Media-Extraction

Программа позволяет создавать папки внутри результирующего FLA-файла и перемещает все помеченные ресурсы (Font, Shapes, Pictures, Sounds и Videos), найденные в SWF, в соответствующие папки (рис. 9).

Рис. 9. Панель Library Folders

Функция Font To Shape Conversion обеспечивает возможность графически конвертировать весь статический текст в масштабе 1:1, даже если искомый шрифт не установлен на компьютере.

В IMPERATOR FLA также имеется функция Recovery-Protection, позволяющая добавить защитный код на выбранные SWF-файлы, запрещая конвертировать их с помощью IMPERATOR FLA.

Liatro SWF Decoder 4.5

Размер дистрибутива: 812 Кбайт (30-дневная ознакомительная версия)

Способ распространения: shareware

Цена: 39 долл.

Работа под управлением: Windows 95/98/Me/NT/2000/XP

Liatro SWF Decoder позволяет просматривать, анализировать и извлекать ресурсы из SWF-файлов, включая Action Script, кнопки, формы, изображения, спрайты, тексты, шрифты, кадры и звуки. Ресурсы можно извлекать как JPEG-, MP3-, WAV-, text- или SWF-файлы.

Программа SWF Decoder проста в работе: надо лишь щелкнуть мышью по анализируемому SWF-файлу, и во встроенной панели произойдет декодирование фильма и будет сгенерировано дерево, отображающее структуру файла. Вы можете экспортировать любой элемент из этого дерева, а также просмотреть выделенные элементы на базе встроенного Flash-плеера. SWF Decoder поддерживает Flash версии 3, 4, 5 и MX.

Программа позволяет извлекать ресурсы как из SWF-, так и из ЕХЕ-файлов.

SWF Decompiler MX 2004 Pro 40220

Разработчик: SourceTec Software (http://www.sothink.com)

Размер дистрибутива: 2192 Кбайт

Способ распространения: shareware

Цена: 40 долл.

Работа под управлением: Windows 95/98/Me/NT/2000/XP

SWF Decompiler — это инструмент для просмотра и анализа SWF-файлов, позволяющий извлекать формы, изображения, звуки, Flash Video (файлы в формате FLV), шрифты, тексты, мувиклипы и декомпилировать Action Script, переводя его в аккуратный, легко читаемый код (рис. 10). В последней версии (MX 2004 Pro 40220) SWF Decompiler поддерживает Flash MX 2004 и Action Script 2.0. Программа позволяет просматривать как SWF-, так и автономные ЕХЕ-файлы.

Рис. 10. Интерфейс программы SWF Decompiler

После инсталляции SWF Decompiler в панели Internet Explorer появляется кнопка SWF Catcher, посредством которой можно вызывать все функции программы.

SWF Decompiler позволяет отображать компоненты фильма по группам (формы, шрифты, тексты, спрайты, кнопки и т.п). Декомпилированный код выдается с подсветкой синтаксиса.

С помощью программы можно искать SWF-файлы на жестком диске, в Сети или в кэше Internet Explorer и проигрывать их во встроенном плеере.

SWF Extractor 2.2

Разработчик: GlobFX (http://www.globfx.com/)

Размер дистрибутива: 691 Кбайт

Способ распространения: shareware

Цена: 25 долл.

Работа под управлением: Windows 95/98/Me/NT/2000/XP

SWF Extractor позволяет извлекать изображения и звуки из SWF-файлов. Изображения извлекаются как JPEG- или PNG-файлы, а звуки как MP3- или WAV-файлы.

SWF Extractor поддерживает Macromedia Flash 3, 4, 5 и MX-форматы.

Программа имеет режим предпросмотра Detailed List (рис. 11).

Рис. 11. Режим просмотра Detailed List

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

Рис. 12. Режим просмотра с иконками Thumbnail

SWF Scanner 2.6.3

Разработчик: Live Tronix (http://www.livetronix.com)

Размер дистрибутива: 782 Кбайт

Способ распространения: shareware

Цена: 19,99 долл.

Работа под управлением: Windows 95/98/Me/NT/2000/XP

SWF Scanner — это удачное решение на случай, если вы потеряли свои исходники. Программа позволяет редактировать некоторые элементы SWF-файла, а также извлекать Action Script (рис. 13), изображения и звуки из SWF-файла (рис. 14). Программа проста в работе и не требует обучения. SWF Scanner 2.5 поддерживает стандарт Flash 5 Action Script.

Рис. 13. Пример извлечения Action Script

Рис. 14. Пример извлечения ресурсов из SWF-файла

Программа позволяет изменять размер кадра и скорость смены кадра без FLA-файла.

Если вам нужно, например, обновить корпоративный логотип или изменить какое-то изображение в Flash-презентации, а исходника нет, то SWF Scanner предлагает простое решение: все, что нужно сделать, — это выбрать файл, который вы желаете заменить, указать новый файл на жестком диске и нажать кнопку Replace and Save (рис. 15).

Рис. 15. Функция смены изображений

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

Unlock SWF 3.0

Разработчик: Manitu Group http://www.manitugroup.com/

Размер дистрибутива: 322 Кбайт

Способ распространения: freeware

Цена: бесплатно

Работа под управлением: Windows 95/98/Me/NT/2000/XP

UnlockSWF — это утилита (рис. 16), позволяющая удалить/переустановить защиту от импорта (Protect from Import) на SWF-файл. С помощью Unlock SWF можно открывать компрессированные SWF-файлы и сохранять их как SWF-версии 6 (в компрессированном и некомпрессированном виде).

Рис. 16. Интерфейс утилиты Unlock SWF

При экспорте фильма с помощью Macromedia Flash предоставляется опция Protect from Import для защиты SWF- файла паролем. Flash не позволит импортировать SWF-файл, который был экспортирован с данной защитой, или потребует пароля перед импортированием. Если вы потеряли исходный FLA-файл (обычно SWF доступен всегда, так как хранится на Web), но при экспорте вы указали защиту и забыли пароль, то импортировать SWF-файл во Flash без снятия защиты вы уже не сможете. UnlockSWF позволяет снять защиту с SWF-файла или удалить возможность импорта по паролю: Flash не будет спрашивать пароль и не будет импортировать SWF. Вы также можете добавить защиту на незащищенный SWF, и тогда Flash не будет импортировать SWF.

Swifty Hercules 2.1

Разработчик: Manitu Group

Размер дистрибутива: 288 Кбайт

Способ распространения: freeware

Цена: бесплатно

Работа под управлением: Windows 95/98/Me/NT/2000/XP

Swifty Hercules — это небольшое Windows-приложение — утилита, позволяющая извлекать мувиклипы (Movie Clips) из SWF-файла как отдельные SWF-файлы.

Программа поддерживает SWF-версии до шестой включительно.

Swifty Xena Pro 1.4

Разработчик: Manitu Group

Размер дистрибутива: 156 Кбайт

Способ распространения: freeware

Цена: бесплатно

Работа под управлением: Windows 95/98/Me/NT/2000/XP

Swifty Xena извлекает ресурсы из SWF-файлов, включая Flash.exe, Aftershock.exe, projector-файлы и Director movie-файлы. Программа позволяет заменять исполняемый файл (или фильм) другим SWF-файлом.

Swifty Zeus 2.1

Разработчик: Manitu Group

Размер дистрибутива: 288 Кбайт

Способ распространения: freeware

Цена: бесплатно

Работа под управлением: Windows 95/98/Me/NT/2000/XP

Swifty Zeus позволяет извлекать слои из SWF-файла как отдельные SWF-файлы, что дает возможность изучить послойную структуру документа.

Илон Маск рекомендует:  Что такое код muscat_get
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL