Comment Copier le Contenu d'une Toile à Une Autre Toile Localement
Je voudrais copier TOUT le contenu d'une toile et de les transférer à l'autre sur le côté client. Je pense que je voudrais utiliser le canvas.toDataURL()
et context.drawImage()
méthode à mettre en œuvre, mais je suis en cours d'exécution dans un certain nombre de questions.
Ma solution serait d'obtenir Canvas.toDataURL()
et les stocker dans un objet Image en Javascript, et ensuite utiliser le context.drawImage()
méthode pour le replacer.
Cependant, je crois que le toDataURL
méthode retourne un 64 bits étiquette codée avec "data:image/png;base64,"
ajouté à elle. Cela ne semble pas être une étiquette valide (je pourrais toujours utiliser des RegEx pour supprimer ce), mais est-ce que 64 bits codés chaîne APRÈS le "data:image/png;base64,"
sous-chaîne d'une image valide? Je peux dire image.src=iVBORw...ASASDAS
, et d'en tirer le retour sur la toile?
J'ai regardé certaines questions connexes:
Affichage de la toile de l'image d'une toile à l'autre de la toile à l'aide de base64
Mais les solutions ne semblent pas être correct.
Vous devez vous connecter pour publier un commentaire.
En fait, vous n'avez pas à créer une image du tout.
drawImage()
d'accepter unCanvas
ainsi que d'uneImage
objet.Façon plus rapide que d'utiliser un
ImageData
objet ouImage
élément.Noter que
sourceCanvas
peut être un HTMLImageElement, HTMLVideoElement, ou un HTMLCanvasElement. Comme mentionné par Dave dans un commentaire en dessous de cette réponse, vous ne peut pas utiliser une toile contexte de dessin comme source. Si vous avez une toile contexte de dessin à la place de l'élément canvas, il a été créé, il y a une référence à l'original de l'élément canvas sur le contexte danscontext.canvas
.Ici est un jsPerf de démontrer pourquoi c'est la seule bonne façon de cloner une toile: http://jsperf.com/copying-a-canvas-element
HTMLCanvasElement
), vous pas tirage au sort d'un contexte (CanvasRenderingContext2D
). UtilisationmyContext.canvas
à la place.source canvas
vient de...@robert-hurst a un nettoyeur approche, mais cette solution peut être utilisée dans des endroits où vous avez réellement envie d'avoir une copie des Données de l'Url après la copie. Exemples: lorsque vous créez un site web qui utilise beaucoup de l'image/canevas des opérations.
J'ai réussi à faire fonctionner tout ça, ce que j'ai fait semble correct:
(URL ci-dessus est un exemple)
Cela semble fonctionner lorsque je l'exécute sur la console de Chrome et de FireBug