159 votes

Comment faire un canevas transparent en html5 ?

Comment rendre une toile transparente ? J'en ai besoin parce que je veux mettre deux toiles l'une sur l'autre.

246voto

Omiod Points 3079

Les toiles sont transparentes par défaut.

Essayez de définir une image d'arrière-plan de la page, puis placez une toile par-dessus. Si rien n'est dessiné sur le canevas, vous pouvez voir entièrement l'arrière-plan de la page.

Pensez à une toile comme peinture sur une plaque de verre .

Pour effacer une toile après avoir dessiné dessus, il suffit d'utiliser clearRect :

const context = canvas.getContext('2d');
context.clearRect(0, 0, canvas.width, canvas.height);

8 votes

Les toiles ont un arrière-plan noir sur les mobiles, donc la superposition des toiles ne fonctionne pas dans ce cas. (Au moins sur Chrome pour Android)

14 votes

Autant pour les normes, comme d'habitude.

11 votes

Je pense que ces réponses passent à côté de l'essentiel. Comme pour la question précédente, je veux avoir deux toiles superposées : celle du bas contient une image statique, mais celle du haut contient des sprites animés. La couche supérieure doit avoir un arrière-plan transparent, mais elle doit aussi être "effacée" et redessinée à chaque image animée. Oui, il est transparent par défaut, mais comment le remettre à l'état transparent et au début de chaque nouvelle image d'animation ?

63voto

J Sprague Points 64

Je crois que vous essayez de faire exactement ce que je viens d'essayer de faire : Je veux deux toiles empilées... celle du bas contient une image statique et celle du haut contient des sprites animés. À cause de l'animation, il faut que l'arrière-plan de la couche supérieure devienne transparent au début du rendu de chaque nouvelle image. J'ai finalement trouvé la réponse : il n'utilise pas globalAlpha, et il n'utilise pas une couleur rgba(). La réponse simple et efficace est :

context.clearRect(0,0,width,height);

53voto

stecb Points 7663

Si vous voulez un <canvas id="canvasID"> pour être toujours transparent, il suffit de définir

#canvasID{
    opacity:0.5;
}

Au lieu de cela, si vous voulez que certains éléments particuliers à l'intérieur de la zone de la toile soient transparents, vous devez définir la transparence lorsque vous dessinez, c.-à-d.

context.fillStyle = "rgba(0, 0, 200, 0.5)";

0 votes

Ah, je cherchais la transparence de fillStyle. Merci !

4 votes

FYI : opacity n'auront aucun effet si le canevas est rempli d'un arrière-plan.

3voto

Marcel Bomfim Points 103

Il suffit de définir l'arrière-plan de la toile comme transparent.

#canvasID{
    background:transparent;
}

1 votes

Cette réponse ne fonctionne pas dans toutes les situations, context.clearRect(0, 0, width, height) est la solution qui a fonctionné pour moi

3voto

Chris Points 432

Peignez vos deux toiles sur une troisième toile.

J'ai eu le même problème et aucune des solutions proposées ici n'a résolu mon problème. J'avais une toile opaque avec une autre toile transparente au-dessus. La toile opaque était complètement invisible mais l'arrière-plan du corps de la page était visible. Les dessins de la toile transparente du dessus étaient visibles alors que la toile opaque du dessous ne l'était pas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X