Comment faire pour modifier l'opacité (alpha, transparence) d'un élément dans une toile d'élément, après qu'elle a été dessinée?
En utilisant le HTML5 <canvas>
élément, je voudrais charger un fichier image (PNG, JPEG, etc.), dessiner sur la toile de manière totalement transparente, et puis en fondu. J'ai compris comment faire pour charger l'image et le dessiner sur la toile, mais je ne sais pas comment modifier son opacité, une fois qu'il a été établi.
Voici le code que j'ai pour l'instant:
var canvas = document.getElementById('myCanvas');
if (canvas.getContext)
{
var c = canvas.getContext('2d');
c.globalAlpha = 0;
var img = new Image();
img.onload = function() {
c.drawImage(img, 0, 0);
}
img.src = 'image.jpg';
}
Sera quelqu'un merci de me diriger dans la bonne direction comme une propriété ou d'une fonction à appeler qui va changer l'opacité?
Vous devez vous connecter pour publier un commentaire.
Je suis également à la recherche d'une réponse à cette question, (pour être clair, je veux être en mesure de dessiner une image de l'utilisateur définit l'opacité comme la façon dont vous pouvez dessiner des formes avec l'opacité) si vous dessinez avec des formes primitives, vous pouvez définir le fond et le contour de la couleur avec alpha pour définir la transparence. Aussi loin que j'ai conclu que le droit maintenant, cela ne semble pas affecter l'image de dessin.
J'ai conclu que la définition de la
globalCompositeOperation
fonctionne avec des images.Je me demande si il y a une sorte de troisième voie de la définition de la couleur, de sorte que nous pouvons teinte des images et les rendre transparents facilement.
EDIT:
Après le creusement plus loin j'en ai conclu que vous pouvez définir la transparence d'une image, réglage de la
globalAlpha
paramètre AVANT de dessiner l'image:Si vous voulez obtenir un effet de fondu au fil du temps vous besoin d'une sorte de boucle qui modifie la valeur alpha, c'est assez facile, un moyen d'y parvenir c'est la
setTimeout
fonction, cherchez à créer une boucle à partir de laquelle vous souhaitez modifier l'alpha au fil du temps.canvas
élément qui a leglobalAlpha
de la propriété, mais le contexte que vous obtenez à partir de la toile.canvas2d.fillStyle = "rgba(255, 255, 255, 0.5)";
ne fonctionne pas. La valeur doit être au format hexadécimal.Certains plus simple exemple de code pour l'utilisation de
globalAlpha
:Si vous avez besoin d'
img
à charger:Notes:
Définir la
'src'
dernier, afin de garantir que votreonload
gestionnaire est appelé sur toutes les plateformes, même si l'image est déjà dans le cache.Envelopper les changements des trucs comme
globalAlpha
entre unsave
etrestore
(en fait utiliser beaucoup), pour vous assurer de ne pas tabasser des paramètres à partir de l'étranger, notamment lorsque les bits de code de dessin va être appelé à partir d'événements.globalAlpha
n'est pas flou du tout. Il va définir l'alpha pour tous les ultérieure dessin (ça ne change rien, déjà établie), et c'est pourquoi dans l'exemple de code que j'ai l'envelopper danssave
etrestore
, à la limite de ce qu'il s'applique.Edit:
La réponse marquée comme "correct" n'est pas correct.C'est facile à faire. Essayez ce code, remplacement d' "ie.jpg" avec ce que l'image que vous avez à portée de main:
La clé est la globalAlpha propriété.
Testé avec IE 9, 5 FF, Safari 5 et Chrome 12 sur Win7.
Le post est vieux, jusqu'à présent, je vais aller avec ma suggestion. La Suggestion est basée sur la manipulation de pixels en toile contexte 2d.
De MDN:
De manipuler les pixels, nous allons utiliser deux fonctions ici - getImageData et putImageData
getImageData utilisation de fonction:
et putImageData syntaxe:
Où contexte est votre toile contexte 2d
De sorte à obtenir rouge, vert, bleu et alpha valeurs, nous allons effectuer les opérations suivantes:
Où x est x offset, y est de décalage sur y sur toile
Nous avons donc ayant le code de prise d'image semi-transparente
Vous pouvez vous faire propre "shaders" - voir plein de MDN article ici
Vous le pouvez. Transparent toile peut être rapidement disparu en utilisant destination de sortie mondial composite de l'opération. Il n'est pas parfait à 100%, parfois, il laisse quelques traces, mais il pourrait être modifié, en fonction de ce qui est nécessaire (c'est à dire utiliser la "source-over" et le remplir avec la couleur blanche avec un alpha à 0,13, puis fondu pour préparer la toile).
Je pense que cela répond à la question mieux, il fait des changements de la valeur alpha de quelque chose qui a été déjà établi. Peut-être que ce n'était pas une partie de l'api lorsque cette question a été posée.
donné contexte 2d
c
.Si vous utilisez jCanvas bibliothèque, vous pouvez utiliser l'opacité de propriété lors de l'élaboration. Si vous avez besoin d'effet de fondu sur le dessus de cela, il suffit de redessiner avec des valeurs différentes.
Vous ne pouvez pas. C'est de graphiques en mode exécution. Mais vous pouvez les trier, de les simuler par un rectangle de la couleur d'arrière-plan avec une opacité.
Si l'image est plus autre chose qu'une couleur constante, alors il devient un peu plus compliqué. Vous devriez être en mesure d'utiliser le pixel méthodes de manipulation dans ce cas. Il suffit d'enregistrer la zone avant de dessiner l'image, puis se fondent que sur le haut avec une opacité par la suite.