TUTORIELS 
Découvrir Ming

Page 1 | 2

Première approche de Ming, une bibliothèque permettant de générer à la volée des fichiers au format Flash (SWF) à partir de PHP, Python, ou C++...
 (10 décembre 2002)
 

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

 
[ Xavier Borderie,JDNet
 
Accueil | Haut de page