DESSINER AVEC HTML5 – OBJET CANVAS Images statiques
Transcription
DESSINER AVEC HTML5 – OBJET CANVAS Images statiques
canvas_statistiques_partie1.odt DESSINER AVEC HTML5 – OBJET CANVAS Images statiques – première partie Canvas est une balise HTML mais les méthodes de dessin sont l'affaire de JAVASCRIPT. Canvas, comme img, est une balise de type inline qui peut avoir les attributs suivants : • width • height • id Par défaut les dimensions sont de 300 par 150 pixels Avec canvas on peut réalises des dessins statiques ou animés en 2D. Donc canvas remplace Flash Dans ce premier tutoriel nous allons traiter des images statiques. Dans un deuxième tutoriel nous traiterons des animations. Nous n'utiliserons pas la librairie jquery et pourtant le code HTML et JAVASCRIPT seront bien dissociés : plus aucune référence au JS dans le code HTML. 1 DESSINER DES RECTANGLES Un carré n'est une forme particulière de rectangle ! 1.1 LA PAGE NOMMÉE 'RECTANGLES_VIDES.HTM' 1.1.1 LE CODE LA PAGE ... <style> canvas { display : block ; border: 1px solid black; margin-left : auto ; margin-right : auto ; margin-top : 50px ; } </style></head> <body> <canvas width = '300' height = '300'> <p>Votre navigateur est obsolète</p> </canvas> <script> var canvas = document.querySelector('canvas'); var contexte = canvas.getContext('2d'); contexte.strokeRect(20,20,100,100); contexte.strokeRect(40,40,100,100); contexte.strokeRect(60,60,100,100); contexte.strokeRect(80,80,100,100); contexte.strokeRect(100,100,100,100); contexte.strokeRect(120,120,100,100); contexte.strokeRect(140,140,100,100); contexte.strokeRect(160,160,100,100); contexte.strokeRect(180,180,100,100); </script> </body></html> 1.1.2 APERÇU 9 carrés de 100 par 100 Chaque carré a son arête supérieure gauche décalée de 20 pixels à droite et en bas par rapport au précédent 1.1.3 COMMENTAIRES Du CSS : 1 sur 17 canvas_statistiques_partie1.odt L'objet de type canvas a été transformée en objet de type block afin de pouvoir le centrer horizontalement Du HTML : La boîte aura une taille de 300 par 300 Si vous testez cette page avec un vieux navigateur le message : "votre navigateur est obsolète" va apparaître Du JAVASCRIPT : La variable canvas référence la balise canvas. On a utilisé la nouvelle méthode querySelector qui peut être argumenté avec un nom de balise ou un nom de classe ou un nom d'id La variable contexte va chercher l'API de dessin 2D et l'appliquer à la variable canvas Une API de dessin 3D est prévue à terme ... La fonction strokeRect() permet de dessiner les contours d'un rectangle Syntaxe de cette fonction strockeRect(x,y, largeur, hauteur) avec x et y sont les coordonnées de l'arête supérieure gauche du rectangle Par défaut le contour est en noir avec une largeur de 1pixel 1.1.4 EMPLACEMENT DUS SCRIPT JS Le script est automatiquement appelé puisqu'il il est inséré dans la partie body après code HTML Attention si le script JS est dans la partie body mais avant la balise canvas vous aurez le message d'erreur suivant : canvas is null en effet on ne peut manipuler en JS un objet HTML qui n'existe pas encore ! 1.2 1.2.1 LA PAGE NOMMÉE 'RECTANGLES_PLEINS.HTM' APERÇU 1.2.2 LE CODE Seule le code JS est changé par rapport à la page précédente : <script> var canvas = ... ; var contexte = ... contexte.fillStyle = "rgba(255,0,0,0.5)" ; for (i=1; i<=8; i++) { contexte.translate(20,20) ; // déplacement origine pour rectangle suivant contexte.fillRect(0,0,100,100); // dessiner un rectangle plein } // fin for // huit rectangles décalés </script> ... 1.2.3 COMMENTAIRE La méthode fillStyle permet de définir une couleur de remplissage. On peut utiliser une couleur transparente avec la notation rbga (La quatrième valeur est l'alpha) La méthode translate(x,y) permet de déplacer le point d'origine. Lors de chaque passage dans la boucle on déplace le point d'origine de 20 pixels à droite et en bas 2 sur 17 canvas_statistiques_partie1.odt Donc pour chaque rectangle l'arête haut et gauche est toujours la nouvelle origine (0,0) La méthode fillRect crée des rectangles pleins Syntaxe de fillRect(x,y, largeur, hauteur) avec x et y coordonnées de l'arête supérieure gauche du rectangle 1.3 LA PAGE NOMMÉE 'RECTANGLES_VIDES_ET_PLEINS.HTM' Dans cette page il y a deux canvas de 300 par 300. Pour les distinguer les deux zones de dessin il faut bien sûr utiliser un id différent ! 1.3.1 APERÇU 1.3.2 COMMENTAIRES Dans le canvas de gauche 8 rectangles vides avec un contour vert de 5 pixels d'épaisseur Dans le canvas de droite 8 rectangles pleins de couleur verte (lime) avec un alpha de 0.5 A chaque fois il y a un décalage de 20 pixels à droite et à gauche de l'arête haute et gauche du rectangle par rapport au précédent. 1.3.3 LE CODE (EXTRAITS) ... <style> canvas { display : inline-block ; border: 1px solid black; margin : 20px ; } </style></head> <body> <canvas width = '300' height = '300' id = 'dessin1'> <p>Votre navigateur est obsolète</p> </canvas> <script> var canvas1 = document.querySelector('#dessin1'); var contexte = canvas1.getContext('2d'); contexte.strokeStyle = 'green'; contexte.lineWidth = '5' ; for (i=1; i<=8; i++) { ... ; // déplacement du point d'origine ... ; // dessiner rectangle vide } </script> <canvas width = '300' height = '300' id = 'dessin2'> ... </canvas> <script> var canvas2 = document.querySelector('#dessin2'); ... </script> </body></html> 1.3.4 ANALYSE DU CODE Du CSS : 3 sur 17 canvas_statistiques_partie1.odt Display : inline-block pour créer des boîtes 'en ligne' c'est à dire sans saut de ligne ! Du JS : Deux scripts JS : • l'un après le premier canvas • l'autre après le deuxième canvas La méthode strokeStyle() pour définir une couleur de contour La méthode lineWidth() pour définir l'épaisseur du contour On doit produire 8 rectangles donc on crée une boucle qui est répété 8 fois 1.4 1.4.1 EXERCICE : LE DRAPEAU SUISSE APERÇU 1.4.2 COMMENTAIRE Canvas de 400 par 400 Drapeau : 200 par 200 au centre du canvas donc arête supérieure gauche du rectangle rouge a les coordonnées suivantes : x : 400 /2 - 200 / 2 = ... y : ... A l'intérieur du rectangle rouge deux rectangles blancs : • un rectangle de 140 par 40 centré verticalement dans drapeau donc arête supérieure gauche de ce rectangle dans le drapeau est : x = (200 – 140) / 2 = 30 ; y = (200 - 40) / 2 = 80 Donc arête supérieure gauche par rapport à canvas : x = 30 +100 ; y = 80 +100 • un rectangle de 40 par 140 centré horizontalement dans drapeau donc arête supérieure gauche de ce rectangle dans le drapeau est : x = (200 - 40) / 2 = 80 ; y = (200 – 140) / 2 = 30 1.4.3 LE CODE DE LA PREMIÈRE VERSION : 'DRAPEAU_SUISSE.HTM' ... <body> <canvas width = '400' height = '400'> <p>...</p> </canvas> <script> var canvas = ... var contexte = ... ... = 'red'; contexte.fillRect(... contexte.clearRect(130,180,140,40); // attention coordonnées de l'arête supérieure gauche de la bande par rapport à canvas ! contexte.clearRect(... </script> </body></html> 1.4.4 ANALYSE DU CODE La méthode clearRect() est une gomme qui efface l'équivalent d'un rectangle Syntaxe de clearRec(x, y , largeur, hauteur) avec x et y coordonnées de l'arête supérieure gauche du rectangle 4 sur 17 canvas_statistiques_partie1.odt 1.4.5 CRITIQUES DU CODE Pour dessiner les deux bandes d'effacement il faut d'abord déterminer les coordonnées de l'arête supérieure gauche des deux bandes dans le drapeau et ensuite dans le canvas. C'est fastidieux ... Le raisonnement serait plus simple si on faisait un changement d'origine ! 1.4.6 'DRAPEAU_SUISSE_BIS.HTM' Dans cette version les coordonnées de l'arête supérieur des bandes sont déterminées par rapport à l'arête supérieure gauche du drapeau Le canvas fait 400 par 400 ; le drapeau de 200 par 200 est centré dans canvas Extrait du script : ... contexte.fillStyle = 'red'; contexte.fillRect(100,100,200,200) ; contexte.translate(100,100); contexte.clearRect(... contexte.clearRect(... ... 5 sur 17 canvas_statistiques_partie1.odt 2 2.1 TRACER DES LIGNES DROITES LA PAGE NOMMÉE 'CROIX_SAINT_ANDRE.HTM' 2.1.1 APERÇU Canvas de 200 par 200. Croix de Saint André centrée dans le canvas Première droite démarre à 50, 50 et se termine à 150,150 Deuxième droite démarre à 150,50 et se termine à 50, 150 2.1.2 LE CODE DE LA PAGE (EXTRAITS) ... <body> <canvas width ='200' height ='200'> <p>Votre navigateur ... </p></canvas> <script> canvas = ... ; contexte = ... ; X = canvas.width ; Y = canvas.height; // donc X vaut ... et Y vaut : ... contexte.beginPath();//On démarre un nouveau tracé contexte.moveTo(X/4, Y/4); // on place le stylo au point 50, 50 contexte.lineTo(X-X/4,Y-Y/4); // première droite contexte.moveTo(X-X/4, Y/4); contexte.lineTo(X/4,Y-Y/4); // deuxième droite contexte.lineWidth = 3 ; // épaisseur du trait contexte.stroke() ; //tracer les droites </script> ... 2.1.3 COMMENTAIRE Il est très facile de récupérer les dimensions du canvas avec les propriétés JS width et height Il faut tracer deux diagonales ! La méthode beginPath() indique le début du tracé La fonction moveTo permet de placer le stylo La fonction lineTo permet de tracer (mais sans encre) la première droite On déplace le stylo (moveTo) puis on trace la deuxième droite (lineTo) Ensuite il faut utiliser l'encre : fonction stroke() pour tracer effectivement les droites avec l'épaisseur précisée par la propriété lineWidth 2.1.4 LES SYNTAXES La méthode moveTo(x,y) avec x et y : coordonnées du point de départ de la droite La méthode lineTo(x,y) avec x et y : coordonnées du point d'arrivée de la droite 2.1.5 REMARQUES Les points de départ et d'arrivé des droites sont définies par rapport aux dimensions du canvas. Donc on peut modifier la taille du canvas sans qu'il soit nécessaire de modifier le code de la fonction JS 2.1.6 TESTS Redimensionnez canvas : 300 par 300 et testez Redimensionnez canvas : 400 par 400 et testez 6 sur 17 canvas_statistiques_partie1.odt 2.2 2.2.1 LA PAGE NOMMÉE 'PARALLELOGRAMME' APERÇU 2.2.2 COMMENTAIRE Canvas de 300 par 300 La forme dans canvas : • point de départ de la forme : 100, 50 • point d'arrivée première droite : 250,50 • point d'arrivée deuxième droite : 200, 250 • point d'arrivée troisième droite : 50, 250 • point d'arrivé quatrième droite = point de départ première droite • contour de la forme de 3 pixels en vert • fond de la forme remplie de rouge 2.2.3 LE CODE DE LA PAGE (EXTRAIT) ... <body> <canvas ... </canvas> <script> ... contexte.beginPath();//On démarre le tracé contexte.moveTo(100,50); contexte.lineTo(...); contexte.lineTo(...); contexte.lineTo(...); contexte.lineTo(...); contexte.lineWidth = 3 ; // épaisseur du trait de contour contexte.strokeStyle ='green'; // couleur contour contexte.stroke() ; //tracer le contour contexte.fillStyle ='red'; // couleur de fond contexte.fill() ; // colorier le fond </script> ... 2.2.4 COMMENTAIRE 2.3 UN TRIANGLE 2.3.1 APERÇU DE LA PAGE "TRIANGLE.HTM" Canvas de 300 par 300 ; triangle avec fond rouge et borduré de vert 7 sur 17 canvas_statistiques_partie1.odt 2.3.2 LE CODE DE LA PAGE (EXTRAIT) ... <body> <canvas ... </canvas> <script> ... contexte.beginPath(); // début de la forme contexte.moveTo(0, 300); //On se déplace au coin inférieur gauche contexte.lineTo(...); // première droite jusque 150,0 contexte.lineTo(...); // deuxième droite jusque 300, 300 contexte.lineTo(...); // troisième droite jusque 0, 300 ... ='green'; ... =3; contexte.stroke(); ... ='red'; contexte.fill(); </script> ... 2.3.3 LA PAGE NOMMÉE "TRIANGLE_BIS.HTM" Le code de la fonction doit être indépendant de la taille du canvas. Il faut donc utiliser les variables X et Y représentant respectivement la largeur et la hauteur du canvas Testez le code JS avec un canvas de 200 par 200 puis de 400 par 400 2.4 EXERCICE : LA PAGE NOMMÉE 'TRIANGLES.HTM' 2.4.1 APERÇU Canvas de 500 par 500 9 triangles isocèles et rectangles ; Les côtes de l'angle droit valent 100px Le premier rectangle a son angle rectangle qui coïncide avec l'arête supérieure gauche de canvas ; le suivant est décalé à droite et en bas de 50 Les triangles sont bordurés de violet (épaisseur de 5) et sont remplis de vert olive 2.4.2 LE CODE DE LA PAGE (EXTRAIT) ... <body> <canvas ... </canvas> <script> ... ... = 'purple'; ... = '5'; ... ='olive'; for (i=1; i <= 9; i++) { 8 sur 17 canvas_statistiques_partie1.odt contexte.beginPath() ; contexte.moveTo(0,0); contexte.lineTo(...) ; contexte.lineTo(...) ; contexte.lineTo(...); ... ; ... ; contexte.translate(50,50); } // fin for </script> ... 2.5 // début forme // remplir le fond // dessiner contour // déplacement point d'origine LA PAGE NOMMÉE 'SERGENT_CHEF.HTM' Dans l'armée française et pour les sous officiers subalternes les insignes de grade sont des chevrons dorés (ou argentées). Un sergent : 2 chevrons ; un sergent chef : 3 chevrons 2.5.1 APERÇU Canvas de 200 par 200 Chevrons d'épaisseur 20 et de couleur or Premier chevron : point de départ : 30, 100 première droite jusqu'à 100, 30 deuxième droite jusqu'à 170, 100 Pour le chevron suivant le y du point de départ augmente de 40 2.5.2 LE CODE JS (EXTRAIT) ... ... = "gold"; ... = 20; for (... ) { contexte.beginPath(); ... (30,100); ... (100,30); ... (170,100); contexte.stroke(); ... (0,40); } // fin for 9 sur 17 canvas_statistiques_partie1.odt 3 TRACER DES CERCLES ET ARCS DE CERCLE 3.1 LA PAGE 'CERCLES.HTM' Deux cercles dans le même canvas 3.1.1 APERÇU 3.1.2 COMMENTAIRE Dimensions du canvas : 200 par 200 Deux cercles de rayon de X/4 Un cercle plein (en jaune) et à côté le contour d'un autre cercle (épaisseur de 5px et couleur orange) Premier cercle a pour centre : X/4 et Y/4 Deuxième cercle a pour centre : X/2 et Y/2 3.1.3 LE CODE JS (EXTRAIT) ... contexte.beginPath(); // début premier cercle contexte.arc(X/4, Y/4, X/4, 0, Math.PI*2); //On trace la courbe délimitant notre forme ... ='yellow'; contexte.fill(); contexte.beginPath(); //début deuxième cercle contexte.arc(...); //On trace la courbe délimitant notre forme ... = 5; .... = 'orange'; contexte.stroke(); 3.1.4 SYNTAXE Pour dessiner des arcs de cercle et des cercles il faut utiliser la méthode arc Syntaxe de la méthode : arc(x, y, rayon, angle départ, angle fin [, sens inverse]) x et y sont les coordonnées du centre du cercle angle de départ et angle de fin sont exprimés en radians le sens inverse est facultatif (par défaut false). Si vous tapez true alors vous dessinez un arc de cercle dans le sens inverse des aiguilles d'une montre Un cercle complet c'est un arc de cercle de 360° ou 2 * Π radians 3.1.5 PASSAGE DEGRÉS À RADIANS On a l'habitude de raisonner en degrés et non pas en radians. Le tableau ci-dessous vous aide à faire le passage degrés – radians 10 sur 17 canvas_statistiques_partie1.odt Grâce au dessin ci-dessus vous pouvez remplir le tableau ci-dessous degrés radians 45 ... 90 ... 135 ... 180 Π 225 ... 270 ... 315 ... 360 2*Π 3.1.6 TESTS Essayez avec un canvas de 300 par 300 Essayez avec un canvas de 400 par 400 3.2 3.2.1 EXERCICE 1 : LA PAGE NOMMÉE 'SENS_INTERDIT.HTM' APERÇU 3.2.2 COMMENTAIRE Canvas de 300 par 300 Cercle plein au centre du canvas avec un rayon de 100 Bande d'effacement de 160 par 40 au centre du cercle donc au centre du canvas. Donc arête supérieure gauche de cette bande d'effacement est • x = 150 – (160/ 2) = ... • y = 150 – (40/2) = ... 3.2.3 LE CODE DE LA PAGE ... </style> <script> window.onload = function() { canvas = ... ; contexte = ... ; contexte.beginPath(); //On démarre cercle plein contexte.arc(... ); //On trace la courbe délimitant notre forme ... ='red'; contexte.fill(); contexte.clearRect(...); } </script></head> <body> <canvas width = '300' height ='300'><p>Votre navigateur est obsolète</p></canvas> </body></html> 11 sur 17 canvas_statistiques_partie1.odt 3.2.4 REMARQUE Le script JS est écrit dans la partie head de la page ! Le code JS correspondant à la création de la forme est intégrée dans une fonction anonyme. Cette fonction est appelée lors du chargement de la page window.onload =function() C'est l'équivalent en JQUERY de : $(document).ready(function() 3.3 3.3.1 EXERCICE 2 : LA PAGE NOMMÉE 'DEMI_CERCLES.HTM' APERÇU 3.3.2 COMMENTAIRE Canvas de 300 par 200 Chaque demi-cercle a un rayon de 50 (ou X/6) Centre du premier demi-cercle (100, 100) ou (X/3, Y/2) Centre du deuxième demi-cercle (200, 100) ou (X/3*2, Y/2) Les deux demi-cercles ont un fond orange 3.3.3 LE CODE DE LA FONCTION ANONYME ... X = ... ; Y = ... ... ='orange'; contexte.beginPath(); ; ... ; //premier demi cercle contexte.fill(); contexte.beginPath(); ... ; //deuxième demi-cercle contexte.fill(); ... 3.3.4 TEST Testez avec un canvas de 600 par 400 puis de 150 par 100 3.3.5 VARIANTE : DEMI_CERCLES_ BIS.HTM Canvas de 600 par 400 Epaisseur du trait 5 pixels ; couleur du trait : orange Reconstituez le code de cette page en vous inspirant de la page précédente 3.4 EXERCICE : LA PAGE NOMMÉE 'COEUR_VIDE.HTM' Nous devons dessiner un coeur 12 sur 17 canvas_statistiques_partie1.odt 3.4.1 ANALYSE DU PROBLÈME Cette image nous montre qu'il s'agit de quatre arcs de cercle appartenant à quatre cercles contigus. 3.4.2 SOLUTION Canvas de 300 par 300 Les quatre cercles ont pour centre (x , y) : • cercle haut gauche : 100, 100 • cercle haut droit : 200,100 • cercle bas gauche : 100, 200 • cercle bas droit : 200, 200 cercle arc de cercle dans ce cercle (en radians) haut gauche de 0,5 à 2 haut droit de 1 à 0,5 bas gauche de1,5 à 2 bas droit de 1 à 1,5 Contour des arcs : rouge avec une épaisseur de 5 3.4.3 LE CODE LA FONCTION (EXTRAIT) ... contexte.beginPath(); contexte.arc(100, 100, 50, 0.5 * Math.PI, 2 * Math.PI); // premier arc de cercle contexte.stroke(); contexte.beginPath(); contexte.arc(200, 100, 50,Math.PI, Math.PI * 0.5); // deuxième arc de cercle contexte.stroke(); ... 3.5 3.5.1 EXERCICE : LA PAGE NOMMÉE 'COEUR_VIDE.HTM' APERÇU Canvas de 300 par 300 13 sur 17 canvas_statistiques_partie1.odt les cercles hauts sont pleins Remplissage de la zone délimitée quatre arcs de cercles de 90° appartenant aux quatre cercles Les quatre arcs de cercle : inscrit dans le cercle arc de cercle haut gauche de 0 à 0.5 Π haut droit de 0.5 Π à Π bas gauche de 1.5 Π à 2 Π bas droit de Π à 1.5 Π Il y a donc trois formes donc trois instructions : beginPath() 3.5.2 LE CODE DE LA FONCTION ... contexte.fillStyle = 'red'; contexte.beginPath(); // premier cercle plein ... contexte.beginPath(); // deuxième cercle plein ... contexte.beginPath(); // forme à l'intérieur de quatre arcs de cercle contexte.arc(... contexte.arc(... contexte.arc(... contexte.arc(... contexte.fill(); ... 14 sur 17 canvas_statistiques_partie1.odt 4 IMPORTER IMAGES DANS CANVAS L'un des intérêt majeur de canvas est de pouvoir importer des images et de les modifier. L'importation basique peut se faire via la propriété CSS background-image (ou son équivalent en JS : backgroundImage) 4.1 LA PAGE 'IMPORTER_IMAGE0.HTM' 4.1.1 APERÇU Canvas de 800 par 600 (taille de l'image tortue.jpg) On a ajouté à une image existante une bulle. Une bulle c'est un rectangle avec du texte plus un triangle 4.1.2 LE CODE DE LA PAGE ... <style> canvas { ... ; background-image : url(tortue.jpg) ; } </style></head> <body> <canvas width = '800' height = '600'>...</canvas> <script> ... ... = 'white' ; ... (500,100, 300, 100); // rectangle à fond blanc ... ='navy'; // couleur du texte ... ='center'; ... = " bold italic 20px arial" ; ... ("Que c'est dur la vie !", 650, 150) ; contexte.beginPath();//On démarre un nouveau tracé contexte.moveTo(700, 200);//On se déplace au coin inférieur gauche ... (750, 200); ... (650, 280); ... (700, 200); ... = 'white'; // couleur de fond triangle de la bulle contexte.fill() ; </script> ... 4.2 EXERCICE : LA PAGE NOMMÉE 'IMPORTER_IMAGES_ALEATOIRE.HTM' Dans la boîte canvas s'affiche de façon aléatoire l'une des cinq images et la légende correspondante à cette image. 4.2.1 APERÇU Canvas de 800 par 600 15 sur 17 canvas_statistiques_partie1.odt 4.2.2 LE CODE DU SCRIPT <script> ... var X = canvas.width ; var Y = canvas.height; var tab_images = new Array('foret.jpg', 'tortue.jpg', 'jardin.jpg' , 'toucan.jpg', 'riviere.jpg') ; var tab_legendes = new Array('la forêt', 'la tortue', 'le jardin' , 'le toucan', 'la rivière'); var rang = Math.floor(Math.random()* tab_images.length) ; // retourne un entier compris entre 0 et 4 (si 5 images) var nom_image = tab_images[rang]; // retourne le nom d'une des images var url = "url(" + nom_image + ")"; // retourne le chemin de l'image var legende = tab_legendes[rang]; canvas.style.backgroundImage = url ; ... // création d'une bulle centrée horizontalement et de X/2 de large et haute de 100 // donc coordonnées de la bulle : X/4, 500 // insertion du contenu de la variable legende // Texte centré verticalement et horizontalement dans la bulle // couleur de texte : navy // mise en forme du texte : bold italic 20px arial </script> 4.3 LA MÉTHODE DRAWIMAGE() Si vous voulez importer une image et : • la positionner dans canvas • et/ou la redimensionner • et/ou la rogner Vous devez alors utiliser la méthode JS drawImage() appliquée à un nouvel objet de type image 4.4 4.4.1 LA PAGE NOMMÉE 'IMPORTER_IMAGE1.HTM' APERÇU Canvas de 1000 par 800 16 sur 17 canvas_statistiques_partie1.odt Image de 800 par 600 est centrée horizontalement et verticalement dans canvas 4.4.2 LE CODE JS (EXTRAIT) ... var X = canvas.width; var Y = canvas.height; var image = new Image(); image.src = 'tortue.jpg'; var x = (X - image.width) / 2 ; var y = (Y - image.height) / 2 ; contexte.drawImage(image,x,y); 4.4.3 LA MÉTHODE DRAWIMAGE Ici nous avons utilisé la première syntaxe possible : drawImage(image, x,y) Avec x et y coordonnées du coin supérieur gauche 4.5 4.5.1 LA PAGE NOMMÉE 'IMPORTER_IMAGE2.HTM' APERÇU Canvas de 1000 par 800 L'image est redimensionnée : la largeur et la hauteur sont divisées par deux et cette image réduite est positionnée au centre du canvas 4.5.2 LE CODE JS (EXTRAIT) ... var image = new Image(); image.src = 'tortue.jpg'; var largeur = (image.width) / 2 ; var hauteur = (image.height) / 2 ; var x = ... var y = ... contexte.drawImage(image,x,y,largeur,hauteur); ... 4.5.3 COMMENTAIRE Ici nous avons utilisé la deuxième syntaxe possible : drawImage(image, x,y,largeur,hauteur) avec : • x et y coordonnées du coin supérieur gauche de l'image • largeur et hauteur : dimension de l'image dans le canvas 17 sur 17