Open Source im professionellen Einsatz

Flash programmieren mit der Ming-Bibliothek

Flash-Film selbst gedreht

Flash führt unter Linux ein Schattendasein, grafische Entwicklungsumgebungen gibt es nicht. Die Ming-Bibliothek hilft jedoch dabei, eigene Flash-Filme zu programmieren. Wie es mit PHP geht, zeigt der Artikel.

Das Format von Flash-Dateien ist kein Geheimnis. 1998 gab Macromedia die Spezifikationen frei und machte damit alternative Implementierungen von Autorensoftware für Flash möglich, die Ming-Bibliothek ist ein Beispiel dafür. Sie ist in der Lage, mit wenigen Ausnahmen standardkonforme SWF-Dateien bis einschließlich Version 6 und 7 zu erstellen. Die Bibliothek ist in C geschrieben, bietet aber Schnittstellen für die populären Skriptsprachen PHP und Perl sowie für C++ und Java.

Installation

Die Ming-Sourcen können von der Projektseite als gepacktes Tar-Archiv heruntergeladen werden[1]. Ming benötigt die Bibliotheken Libungif[2], Libpng[3] und die Programme Flex und Bison, für die Übersetzung des PHP-Moduls zusätzlich die PHP-Headerdateien.

Vor dem Kompilieren des PHP-Moduls sollte man zunächst überprüfen, ob der Befehl »php-config --includes« den Ort der PHP-Headerdateien liefert. Im Falle eines Fehlers kann dieser auch manuell über die Umgebungsvariable »PHPSRC« angegeben werden, zum Beispiel mit:

export PHPSRC=/usr/src/php-4.3


Die Befehle »make« und »make install« besorgen die Übersetzung und Installation in bekannter Weise. Folgende Zeile in der »php.ini« bindet das Modul in die PHP-Installation ein und sorgt dafür, dass es automatisch geladen wird.

extension=php_ming.so


Alternativ lädt in PHP-Skripten die Anweisung »dl("php_ming.so")« das Modul dynamisch.

Ein einfacher Film

Jeder Flash-Film beginnt damit, ein »SWFMovie«-Objekt zu erzeugen (siehe Listing 1, Zeile 3). Dieses Objekt stellt Methoden bereit, um zuerst allgemeine Filmeigenschaften zu definieren wie Hintergrundfarbe, SWF-Version und Framerate (Zeilen 4 bis 6). Sind die grundlegenden Eigenschaften definiert, fügt Zeile 12 dem ersten Frame mit der »add()«-Methode neue Elemente hinzu. Diese Methode nimmt ein SWF-Objekt als Argument und liefert ein »SWFDisplayItem« zurück, siehe Tabelle 1.

Listing 1:
»simple.php«

01 <?
02 
03 $movie = new SWFMovie();
04 $movie->setBackground(0x0,0x00,0xff);
05 $movie->setRate(2);
06 $movie->setDimension(400,300);
07 
08 $shape = new SWFShape();
09 $shape->setLine(5, 0x0, 0xff, 0x00);
10 $shape->drawLine(50,50);
11 
12 $dItem = $movie->add($shape);
13 $dItem->moveTo(200,200);
14 
15 $movie->nextFrame();
16 for($deg = 0; $deg < 360; $deg += 10) {
17     $dItem->rotateTo($deg);
18     $movie->nextFrame();
19 }
20 
21 $movie->remove($dItem);
22 $movie->nextFrame();
23 
24 header('Content-type: application/x-shockwave-flash');
25 $movie->output();
26 ?>

Tabelle 1:
SWF-Objekte

 

Objekt

Aufgabe

SWFShape

Container für primitive Grafikobjekte wie Linien, Kreise
und Polygone

SWFBitmap

Objekt für eine Grafikdatei im DBL-, GIF- oder
JPEG-Format

SWFSound

Objekt für eine Musikdatei im MP3-Format

SWFSoundStream

Enthält eine Musikdatei im MP3-Format als Stream

SWFFont

Repräsentant für eine Font-Datei im FDB-Format

SWFText

Stellt eine Zeichenkette im gegebenen Font dar

SWFVideoStream

Objekt zur Darstellung von Videostreams

SWFAction

Repräsentant für in Byte-Code kompilierten
Actionscript-Programmcode; der Konstruktor erhält den
Quelltext

SWFFill

Repräsentant für einen Füllstil

SWFGradient

Erzeugt einen Farbverlauf

SWFMorph

Repräsentant eines fließenden Übergangs zweier
Shape-Objekte

SWFButton

Klickbares Objekt mit Event-Modell

Ein »SWFDisplayItem«-Objekt repräsentiert eindeutig jenes Filmelement, das sich gerade auf der Displayliste befindet und so lange sichtbar bleibt, bis man es wieder entfernt. Wird das gleiche Element einem Film mehrfach hinzugefügt, steht dafür jedes Mal ein neues, eindeutiges Display-Item-Objekt. Die Methoden, die das Display-Item-Objekt bereitstellt, können angezeigte Filmelemente nachträglich manipulieren, etwa drehen, verschieben, verzerren und skalieren. Die Funktion »setName()« weist Elementen eindeutige Namen zu, um sie über »ActionScript« anzusprechen.

Alle Modifikationen von Display-Items laufen im Kontext eines Frame ab. Ruft das Skript die »nextFrame()«-Methode auf (Listing 1, Zeile 15), werden die Änderungen am Film wirksam und ein neuer Frame steht bereit. Der ist zunächst identisch mit dem vorigen, da sich die Displayliste durch den Vorgang nicht verändert. Sollen Filmelemente ab einem bestimmten Zeitpunkt verschwinden, muss der Programmierer sie mit der »remove()«-Methode des »SWFMovie«-Objekts entfernen (Zeile 21).

Abschließend kann der Film auf zwei Arten ausgegeben werden. Mit PHP besteht die Möglichkeit, den entsprechenden HTTP-Header zu setzen (Zeile 24) und dann den fertigen Flash-Film direkt ohne Zwischenspeichern auszugeben (Zeile 25). Alternativ schreibt die Library den Film als SWF-Datei.

Um Platz und Bandbreite zu sparen, lassen sich Flash-Filme seit SWF-Version 6 komprimieren. Die »save()«- und die »output()«-Methode verarbeiten die Kompressionsrate als optionalen Parameter. Erlaubt sind Werte von -1 (keine Kompression) bis 9 (Maximalwert). Abbildung 1 zeigt das sichtbare Ergebnis im Browser.

Abbildung 1: Das Beispiel aus Listing 1 lässt eine Linie um einen ihrer Endpunkte rotieren. Die Darstellung übernimmt hier das Flash-Plugin des Firefox-Browsers.

Abbildung 1: Das Beispiel aus Listing 1 lässt eine Linie um einen ihrer Endpunkte rotieren. Die Darstellung übernimmt hier das Flash-Plugin des Firefox-Browsers.

Diesen Artikel als PDF kaufen

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook