Accueil
Mes tutoriels sur la programmation

Tutoriel Canvas - sommaire


Vous pouvez me contacter via Facebook (questions, critiques constructives) : page facebook relative à mon site

Canvas : dégradés radiaux et linéaires & motifs

Une forme canvas peut être remplie avec un dégradé (linéaire ou radial) voire avec un motif.
Examinons d'abord les dégradés radiaux puis les dégradés radiaux et enfin les motifs.

Dégradés radiaux

Exemple

Le canevas comprend deux parties. Le cercle de gauche est rempli avec un dégradé radial tricolore et le cercle de droite est rempli avec un dégradé radial tricolore également mais avec un cercle rouge de rayon X/8 non dégradé.

Le code correspondant

Le canevas responsive fait 900 par 450.

Le script :

		var canevas = document.querySelector("canvas");
		var contexte = canevas.getContext('2d');
		X = canevas.width;
		Y =canevas.height;
		// degradé radial pour le cercle de gauche
		var degrade1 = contexte.createRadialGradient(X/4,Y/2,0,X/4,Y/2,X/3) ; 
		// dégrade de violet à blanc en passant à rose ; dégradé commence immédiatement
		degrade1.addColorStop(0,"purple"); 
		degrade1.addColorStop(0.5,"pink"); 
		degrade1.addColorStop(1,"white");
		contexte.fillStyle = degrade1;
		contexte.arc(X/4, Y/2, X/4, 0, Math.PI*2); 
		contexte.fill(); 
		
		// dégradé radial pour le cercle de droite
		var degrade2 = contexte.createRadialGradient(X/4*3,Y/2,X/8,X/4*3,Y/2,X/3) ; 
		// dégrade de rouge à blanc en passant par orange ; dégradé différé de 50
		degrade2.addColorStop(0,"red"); 	
		degrade2.addColorStop(0.5,"orange"); 
		degrade2.addColorStop(1,"white");
		contexte.fillStyle = degrade2;
		contexte.beginPath(); 
		contexte.arc(X/4*3, Y/2, X/4, 0, Math.PI*2); 
		contexte.fill(); 
		...
	

On rencontre dans le script une nouvelle méthode de l'API canvas : var degrade 1 = contexte.createRadialGradient(X/4,Y/2,0,X/4,Y/2,300)

Pour un bon rendu il est souhaitable que les deux cercles aient le même centre. Ce qui est le cas ici pour les deux dégradés radiaux.En effet dans chaque cas le premier paramètre est égal au troisième et le deuxième paramètre est égal au cinquième.

Pour le premier dégradé le rayon du cercle intérieur (troisième paramètre) est 0 ce qui veut dire que la première couleur (purple) se dégrade immédiatement alors que dans le deuxième dégradé la valeur du rayon du centre intérieur est X/8 donc il y a au centre un rond rouge de rayon X/8 uni.

Dégradés linéaires

Exemple

Le deuxième canevas de la page comprend deux carrés. Le carré de gauche est rempli avec un dégradé linéaire bicolore et le carré de droite est rempli avec un dégradé linéaire tricolore.

Le code correspondant

Le canevas responsive fait 900 par 450.

Le script :

		var canevas2 = document.querySelectorAll("canvas")[1];
		var contexte2 = canevas2.getContext('2d');           
		var X = canevas2.width; 			var Y = canevas2.height ; 
		//définition du premier degradé
		var degrade3 = contexte2.createLinearGradient(0,0,X/2,Y);	
		// axe : diagonale descendante
		degrade3.addColorStop(0,"green"); 	
		degrade3.addColorStop(1,"white");
		// remplissage du carré de gauche avec ce dégradé
		contexte2.fillStyle = degrade3; 	
		contexte2.fillRect(0,0,X/2,Y);
		// définition du deuxième dégradé linéaire
		var degrade4 = contexte2.createLinearGradient(X/2,Y,X,0);	
		// axe : diagonale montante
		degrade4.addColorStop(0,"purple"); 	
		degrade4.addColorStop(0.5,"pink"); 
		degrade4.addColorStop(1,"white");
		// remplissage du carré de droite
		contexte2.fillStyle = degrade4; 	
		contexte2.fillRect(X/2,0,X/2,Y);
		...
	

Attention il faut manipuler le deuxième élément "canvas" de la page !
Le deuxième élément de type "canvas" a l'indice 1 !

On rencontre ensuite dans le script une nouvelle méthode de l'API Canvas :
var degrade3 =contexte2.createLinearGradient(0,0,X/2,Y)
La méthode createLinearGradient(x1,y1,x2,y2) détermine l'axe du dégradé linéaire. Ici il s'agit d'une diagonale descendante puisque Les coordonnées du point de départ sont 0,0 et les coordonnées du point d'arrivée sont X/2,Y.
degrade3.addColorStop(0,"green"); degrade.addColorStop(1,"white");: ces deux instructions précisent que le dégradé commence par vert et se termine par blanc. Il y peut y avoir des points de couleur intermédiaires ; le premier paramètre de la méthode addColor doit alors être un réel compris entre 0 et 1.

contexte2.fillStyle = degrade3: La "couleur" de remplissage est égale à la variable degrade3 dans laquelle le premier degradé linéaire a été défini.

contexte2.fillRect(0,0,X/2,Y) : La partie gauche du deuxième canevas de la page est remplie avec ce premier degradé.

Vous devez maintenant être capable de comprendre la deuxième partie du script : définition d'un dégradé linéaire tricolore avec un axe diagonal montant et utilisation de ce dégradé pour remplir la partie droite du canevas.

Canvas : créer et appliquer un motif à un canevas

Exemple

On remplit le canevas de 320 par 320 avec la répétition d'une image (qui fait 160 par 160).

Le code correspondant

Le canevas fait 320 par 320 non responsive (pas de propriétés CSS width & height).

Le script :

...
		var canevas3 = document.querySelectorAll('canvas')[2]; 
		var contexte = canevas3.getContext('2d');
		var X = canevas3.width ; 		var Y = canevas3.height ;
		
		var motif1 = new Image(); 
		motif1.src = '../images/html5_logo.png'; 
		motif1.onload = function() 
		{
			contexte.fillStyle = contexte.createPattern(motif1,'repeat'); 
			contexte.fillRect(0,0,X, Y); 
		}

Dans la méthode createPattern le premier paramètre doit référencer un objet image. En d'autres termes avec Canvas un motif est forcément construit à partir d'une image existante et une seule ...
Le deuxième paramètre de la méthode createPattern peut être repeat ou repeat-x ou repeat-y ou encore no-repeat.