Ich erstelle gerade eine HTML5-Web-App / Phonegap-native App und kann anscheinend nicht herausfinden, wie ich meine Leinwand als Bild speichern kann canvas.toDataURL()
. Kann mir jemand helfen?
Hier ist der Code, was ist daran falsch?
// Meine Leinwand wurde "canvasSignature" genannt
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()
erfasse die Daten mit und verwende dann window.location, um den Browser darauf zu verweisenappname://[data url]
. Auf der App-Seite verfügt UIWebView über eine Delegate-Methode, die angibt, ob eine Seite geladen werden soll oder nicht. Ich höre zuappname://
und zerlege es, wenn es eingeht, verweigere das Laden der Seite und erfasse die Daten-URL in einer nativen Zeichenfolge. Wie vertraut sind Sie mit dem tatsächlichen iOS / Objective C-Code?Antworten:
Hier ist ein Code. ohne Fehler.
quelle
Mit dieser Lösung können Sie den Namen der heruntergeladenen Datei ändern:
HTML:
JAVASCRIPT:
quelle
Sie können canvas2image verwenden , um zum Herunterladen aufzufordern .
Ich hatte das gleiche Problem. Hier ist ein einfaches Beispiel, bei dem beide das Bild zur Seite hinzufügen und den Browser zum Herunterladen zwingen:
quelle
Sie können dies versuchen; Erstellen Sie einen Dummy-HTML-Anker und laden Sie das Bild von dort herunter, wie ...
quelle
Ich habe eine kleine Bibliothek erstellt, die dies tut (zusammen mit einigen anderen praktischen Konvertierungen). Es heißt reimg und ist sehr einfach zu bedienen.
ReImg.fromCanvas(yourCanvasElement).toPng()
quelle
Diese Arbeit für mich: (Nur Google Chrome)
quelle
Ähnlich wie die Antwort von 1000Bugy, aber einfacher, da Sie nicht sofort einen Anker machen und ein Klickereignis manuell auslösen müssen (plus einen IE-Fix).
Wenn Sie Ihren Download-Button zu einem Anker machen, können Sie ihn direkt vor der Ausführung der Standard-Ankerfunktion hochziehen. So
onAnchorClick
können Sie den Anker href auf die Leinwand base64 Bild gesetzt und der Anker - Download - Attribut zu , was auch immer Sie Ihr Bild nennen wollen.Dies funktioniert im (aktuellen) IE nicht, da das Download-Attribut nicht implementiert wird und das Herunterladen von Daten verhindert wird. Dies kann jedoch behoben werden, indem
window.navigator.msSaveBlob
stattdessen verwendet wird.So Handler Click - Ereignis Anker würde wie folgt sein (wo
anchor
,canvas
undfileName
ist Umfang Lookups):Hier ist eine Geige
quelle
Anstelle von
imageElement.src = myImage;
sollten Sie verwendenwindow.location = myImage;
Und auch danach zeigt der Browser das Bild selbst an. Sie können mit der rechten Maustaste klicken und "Link speichern" verwenden, um das Bild herunterzuladen.
Überprüfen Sie diesen Link für weitere Informationen.
quelle
Sie können die zuvor genannten Methoden nicht verwenden, um ein Bild herunterzuladen, wenn Sie in Cordova ausgeführt werden. Sie müssen das Cordova File Plugin verwenden . Auf diese Weise können Sie auswählen, wo es gespeichert werden soll, und verschiedene Persistenzeinstellungen nutzen. Details hier: https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file/
Alternativ können Sie das Bild in base64 konvertieren und dann die Zeichenfolge in localStorage speichern. Dies füllt Ihr Kontingent jedoch ziemlich schnell, wenn Sie viele Bilder oder hochauflösende Bilder haben.
quelle
@Wardenclyffe und @SColvin, Sie versuchen beide, Bilder über die Leinwand zu speichern, nicht über den Kontext der Leinwand. beide sollten Sie versuchen, ctx.toDataURL (); Versuche dies:
Sie können auch auf folgende Links verweisen:
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
quelle
toDataURL
Funktion hat: developer.mozilla.org/en-US/docs/Web/API/… . Sie möchtentoDataURL
das Canvas-Element aufrufen : developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/…