Introduction
Ming est
une bibliothèque C permettant de créer à la
volée des images vectorielles au format Shockwave Flash.
Elle ne permet pas de modifier des fichier SWF existants. Cette
bibliothèque peut être utilisée par le C++,
PHP, Python et Ruby. Nous nous intéresserons ici à
son utilisation à partir de PHP.
Pour pouvoir utiliser Ming, il faut que l'outil soit compilé
sur votre système. Certains hébergeurs le proposent
en standard, et et il figure par défaut dans l'environnement
EasyPHP.
Notez bien que, comme l'indique si bien la documentation officielle,
la bibliothèque Ming est en version beta, et est susceptible
d'être considérablement modifiée à tout
moment...
Première
approche
Un code Ming/PHP de base est de la forme suivante:
(fichier 1.php)
<?php
$swf = new SWFMovie();
$swf->setDimension(800,
600);
$swf->setBackground(0x00,
0x00, 0x00);
header('Content-type:
application/x-shockwave-flash');
$swf->output();
?>
Cela ne fera
que générer un SWF noir de taille 800 * 600. S'il
est chargé directement dans le navigateur, celui-ci le mettra
à 100% de l'espace disponible.
Cette exemple permet de comprendre le déroulement d'un appel
Ming. Après avoir déclaré un nouvel objet SWFMovie,
nous lui assignons ses dimensions et sa couleur de fond (en hexadécimal
- on aurait aussi pu utiliser setBackground(0,0,0);).
Ensuite, la fonction PHP header()
nous permet d'indiquer au navigateur le type MIME des données
qui suivent, ce qui lui permet de les interpréter, les données
étant enfin envoyées au navigateur par la méthode
output() de l'objet créé.
A noter, au lieu d'envoyer directement les données au navigateur,
nous aurions pu sauvegarder le fichier sur le serveur avec la méthode
$swf->save("1.swf");,
et ensuite l'appeller depuis un fichier HTML via la balise
<embed>.
Rien de bien
impressionnant pour l'heure. Continuons en mettant quelques formes
sur la scène...
(fichier 2.php)
<?php
$ligne = new SWFShape();
$ligne->setLine(1, 0, 0, 0);
$ligne->drawLine(0, 220);
$carre = new SWFShape();
$carre->setRightFill($carre->addFill(0, 0, 255));
$carre->movePenTo(-100, -100);
$carre->drawLineTo(100, -100);
$carre->drawLineTo(100, 100);
$carre->drawLineTo(-100, 100);
$carre->drawLineTo(-100, -100);
$swf = new SWFMovie();
$swf->setDimension(800, 600);
$swf->setBackground(255, 255, 255);
$ligne1 = $swf->add($ligne);
$ligne2 = $swf->add($ligne);
$carre1 = $swf->add($carre);
$ligne1->moveTo(130, 240);
$ligne2->moveTo(370, 240);
$carre1->moveTo(250, 350);
header('Content-type: application/x-shockwave-flash');
$swf->output();
?>
Nous revoyons ici un des principes qui régit Flash: le "tout
est objet". En effet, les formes sont d'abord créées
et nommées (nous créons ici une forme "trait
vertical noir de 1 'pixel' de large" et une forme "carré
de 100*100 rempli de bleu".
setLine() permet de définir
un objet "ligne", son épaisseur et sa couleur au
format RGB.
drawLine() permet de dessiner effectivement
la ligne, à savoir qu'ici elle se déplace de 0 'pixel'
vers la droite et de 220 'pixels' vers le bas: nous avons donc une
ligne verticale.
setRightFill() permet de définir
la couleur en RGB de la forme définie: ici, bleu.
movePenTo() déplace le "curseur"
(un peut comme la
Tortue en Logo) au sein de la forme: c'est le point central
(l'origine du repère) d'où partiront toutes les coordonnées
du dessin à venir (sans quoi ces coordonnées seraient
0*0).
drawLineTo() est similaire à
drawLine(), sauf qu'il prend donc
comme base la position du curseur, plutôt que l'origine du
repère de la scène. Nous traçons ainsi quatre
lignes qui forment notre carré de 100 par 100.
Nous créons enfin la scène elle-même avec new
SWFMovie(), en lui donnant dimensions (800*600) et couleur
de fond (blanc).
Les formes déclarées auparavant sont des objets
qui sont ensuite instanciés: les formes $ligne1
et $ligne2 sont toutes les deux
des occurences de la forme/objet $ligne,
tout comme $carre1 est une occurence
de $carre.
Ainsi, comme dans Flash, ce ne sont pas les objets de la bibliothèque
qui sont déposés sur la scène, mais leurs occurences,
qui peuvent être multiples.
Après les avoir posées sur la scène avec la
méthode add(), la méthode
moveTo() nous permet de les placer
à un endroit précis... Notre dessin est terminé.
Un mot sur les 'pixels', en provenance de la documentation
officielle de PHP: "toutes les distances spécifiées (longueurs,
distances, tailles...) sont en "twips", c'est-à-dire 20 unités par
pixels. C'est plus ou moins arbitraire, car le lecteur Flash fait
une mise à l'échelle avec les valeurs qui lui sont fournis dans
la balise embed, ou la frame courante si la balise embed n'est pas
utilisée".
Page suivante, nous allons introduire un petit peu d'animation...
Page 1 | 2
|