Je suis en train de créer une application Web HTML5 / une application native Phonegap et je n'arrive pas à comprendre comment enregistrer ma toile en tant qu'image avec canvas.toDataURL()
. Quelqu'un peut-il m'aider?
Voici le code, quel est le problème?
// Mon canevas a été nommé "canvasSignature"
JavaScript:
function putImage()
{
var canvas1 = document.getElementById("canvasSignature");
if (canvas1.getContext) {
var ctx = canvas1.getContext("2d");
var myImage = canvas1.toDataURL("image/png");
}
var imageElement = document.getElementById("MyPix");
imageElement.src = myImage;
}
HTML5:
<div id="createPNGButton">
<button onclick="putImage()">Save as Image</button>
</div>
.toDataURL()
, puis j'utilise window.location pour pointer le navigateur versappname://[data url]
. Du côté de l'application, UIWebView a une méthode de délégué qui indique s'il doit ou non charger une page. J'écouteappname://
et je le décompose quand il arrive, je refuse le chargement de la page et je capture l'URL des données dans une chaîne native ... dans quelle mesure êtes-vous familier avec le code iOS / Objective C?Réponses:
Voici du code. sans aucune erreur.
la source
Cette solution vous permet de changer le nom du fichier téléchargé:
HTML:
JAVASCRIPT:
la source
Vous pouvez utiliser canvas2image pour demander le téléchargement.
J'ai eu le même problème, voici un exemple simple qui ajoute à la fois l'image à la page et oblige le navigateur à la télécharger:
la source
Vous pouvez essayer ceci; créer une ancre HTML factice et télécharger l'image à partir de là comme ...
la source
J'ai créé une petite bibliothèque qui fait cela (avec quelques autres conversions pratiques). Il s'appelle reimg , et c'est vraiment simple à utiliser.
ReImg.fromCanvas(yourCanvasElement).toPng()
la source
Ce travail pour moi: (Seulement Google Chrome)
la source
Similaire à la réponse de 1000Bugy mais plus simple car vous n'avez pas à créer une ancre à la volée et à envoyer un événement de clic manuellement (plus un correctif IE).
Si vous faites de votre bouton de téléchargement une ancre, vous pouvez le détourner juste avant que la fonctionnalité d'ancrage par défaut ne soit exécutée. Donc ,
onAnchorClick
vous pouvez définir le href d'ancrage à l'image toile base64 et l'attribut de téléchargement d'ancrage pour tout ce que vous voulez nommer votre image.Cela ne fonctionne pas dans (l'actuel) IE car il n'implémente pas l'attribut de téléchargement et empêche le téléchargement des uris de données. Mais cela peut être résolu en utilisant à la
window.navigator.msSaveBlob
place.Ainsi, votre gestionnaire d'événements de clic d'ancrage serait comme suit (où
anchor
,canvas
etfileName
sont des recherches de portée):Voici un violon
la source
Au lieu de
imageElement.src = myImage;
vous devriez utiliserwindow.location = myImage;
Et même après cela, le navigateur affichera l'image elle-même. Vous pouvez faire un clic droit et utiliser "Enregistrer le lien" pour télécharger l'image.
Consultez ce lien pour plus d'informations.
la source
Vous ne pouvez pas utiliser les méthodes mentionnées précédemment pour télécharger une image lors de l'exécution dans Cordova. Vous devrez utiliser le plug-in de fichier Cordova . Cela vous permettra de choisir où l'enregistrer et d'exploiter différents paramètres de persistance. Détails ici: https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file/
Vous pouvez également convertir l'image en base64 puis stocker la chaîne dans localStorage, mais cela remplira votre quota assez rapidement si vous avez de nombreuses images ou en haute résolution.
la source
@Wardenclyffe et @SColvin, vous essayez tous les deux d'enregistrer l'image en utilisant le canevas, pas en utilisant le contexte du canevas. les deux vous devriez essayer de ctx.toDataURL (); Essaye ça:
Vous pouvez également vous référer aux liens suivants:
http://tutorials.jenkov.com/html5-canvas/todataurl.html
http://www.w3.org/TR/2012/WD-html5-author-20120329/the-canvas-element.html#the-canvas-element
la source
toDataURL
fonction: developer.mozilla.org/en-US/docs/Web/API/… . Vous souhaitez appelertoDataURL
l'élément canvas: developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/…