canvas.toDataURL() für die große Leinwand
Ich habe ein problem mit .toDataURL()
für die große Leinwand. Ich möchte enconde in base64
- und entschlüsseln in php Datei, aber wenn ich eine große Leinwand die strDataURI
variable leer ist.
Mein code:
var strDataURI = canvas.toDataURL();
strDataURI = strDataURI.substr(22, strDataURI.length);
$.post("save.php",
{
str: strDataURI
};
Gibt es keine alternative zur .toDataURL()
oder in irgendeiner Weise zu ändern, die Größe zu begrenzen?
Dank.
- Welcher browser, oder ist es alle? IE hat Beschränkungen auf die Größe der data-URL.
- Welchen browser benutzt du und welche Größe hat deine Leinwand eigentlich haben?
- Mein browser ist Google Chrome, aber ich habe getestet, in anderen Browsern. Ich weiß nicht, was ist meine Leinwand Größe, aber die Maße sind 20000x20000 Pixel. Danke.
- Ein 20000x20000 pixel-Bild in eine data-URL über 2 GB Größe. Bearbeiten warten, mehr wie 4 Gigabyte, als JavaScript-strings in UTF-16.
- Haben Sie vielleicht mehr Glück mit einem Blob in diesem Fall eher als ein Daten-uri;
HTMLCanvasElement.toBlob
- Gibt es irgendeine andere Möglichkeit? Wie speichern Sie Bilder direkt mit jquery? Das problem ist, da ich eine Leinwand wie 2000x2000 Pixel, aber ich brauche, um die Größe alle canvas-Elemente und Pixel, da muss ich konvertieren Sie das Bild in 300 DPI (zum Beispiel)...
- Ich thnk, dass ein problem in Bezug auf <canvas> die Größe begrenzen, wie dies stackoverflow.com/questions/6081483/...
- Export der canvas Inhalt als SVG-würde es nicht getan haben? Vektoren gerendert werden kann, in jeder Größe... sobald es fertig ist Sie einfach der Ausgabe ein PNG aus der SVG-wenn Sie ein echtes Bild.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin mir nicht sicher, ob es die Beschränkung auf Leinwand Maße, sondern es werden auch data-urls haben Einschränkungen je nach browser: Data-URL-Größenbeschränkungen.
Was Sie könnten versuchen, ist mit Node.js + node-canvas (server-Seite) neu zu erstellen die Leinwand. Ich habe mit diesen für die Erstellung von druckbaren Bildern aus canvas-Elemente, und habe keine Probleme/Einschränkungen mit toDataURL so weit.
Sind Sie mit der fabric.js Bibliothek? Ich bemerkte Sie auf dem Laufenden über Ihre forum.
Fabric.js kann verwendet werden in Node.js und hat eine toDataURLWithMultiplier Methode, die Skalen der Leinwand/Rahmen um die dataurl Bildgröße. Sie können die Methode Quelle, um zu sehen, wie das gemacht wird.
Edit:
Da Sie mit fabric.js ich würde vorschlagen, mit Node.js zu handle der canvas zu image processing auf dem server. Mehr Infos finden Sie auf wie zu verwenden fabric.js auf Node.js hier.
Hier ist ein einfacher server mit Node.js und express:
Wenn der server läuft, können Sie Daten an ihn zu senden (
postData
).Der server erwartet
json
,width
undheight
neu auf die Leinwand und einmultiplier
skalieren", um die data-url-image. Der client-seitige code würde wie folgt Aussehen:Sollten Sie zunächst Folgendes beachten: die Größe der upload beschränkt ist. Die Grenze ist abhängig von browser, OS und server-Umgebung. Sie können einen Blick auf diesen Artikel: http://www.motobit.com/help/scptutl/pa98.htm
Im Allgemeinen, Sie können versuchen, so etwas wie dieses:
als erstes benötigen wir eine Funktion zum konvertieren der dataURI zu einem blob:
und weiter eine Funktion für das hochladen der Datei mit XMLHttpRequest2:
Jetzt können Sie Ihren pass
strDataURI
auf die erste Funktion und laden Sie dann die Datei mit der zweiten Funktion.Können Sie einen tieferen Einblick in die XMLHTTPRequest2 hier: http://www.html5rocks.com/en/tutorials/file/xhr2/
und über dem blob-Konstruktor hier: https://developer.mozilla.org/en-US/docs/DOM/Blob
Konnte man immer nur brechen das Bild in kleinere Abschnitte und speichern Sie diese einzeln, die ist wahrscheinlich nicht eine schlechte Idee auf jeden Fall. Im Grunde hätten Sie eine Funktion, die so etwas wie
Haben, aktualisiert der code zur Aufteilung der Leinwand in kleinere canvas-Objekte. Funktioniert ziemlich gut und haben einen tracker auch:
Dies Ermöglicht die Verfolgung des upload-Prozesses und insgesamt denke ich, dass ist besser für den Benutzer. Ich verwende PHP um wieder zu einem späteren Zeitpunkt.
Vermeidet es die Probleme, die auf die Größe des canvas /browser etc.
Mein Erster Beitrag also hoffe es hilft!
//übergeben, geben Sie für den Namen der Datei
Ajax hochladen: