ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
962
962
EMPFEHLEN
-
Ich bin auf der Suche nach Informationen zum Thema Canvas.
http://developer.mozilla.org/en/docs/HTML:Canvas
Wie schaffe ich es, eine Grafik aus dem Canvas Element zu erstellen und auf dem
Server zu speichern oder auf irgendeine Art und Weise (dataurl string) in einer Datenbank
abzulegen o.ä.
Ich möchte also eine Zeichenfläche erstellen (was soweit kein Problem sein dürfte) und
diese soll speicherbar sein.
Vielleicht hat mal jemand etwas in der Richtung gemacht? Links, Beispiele, ich freue mich über jegliche Informationen. Danke.
-
Hi,
eine Möglichkeit wäre eine Art Pseude-Serialisierung. Mit Hilfe des ImageData-Objekts und seiner Methoden getImageData und putImageData kannst du über das data-Array die Informationen speichern bzw. zurückschreiben (weitere Infos). Leider sind diese Methoden noch nicht in allen Browsern verfügbar.
Zum Speichern wird das array-Feld in einen durch Kommata getrennten String konvertiert, der anschliessend weiterverarbeitet werden kann.
Zum Wiederherstellen wird dieser String unter Verwendung von split wieder in ein Feld umgewandelt. Die enthaltenen Informationen werden in einer for-Schleife dem data-Array wieder zugänglich gemacht.
Beispiel:
CiaoCode :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
<html> <head> <title>www.tutorials.de</title> <meta name="author" content="Quaese"> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> </head> <body> <canvas width="50" height="50" id="canvas_id" style="margin-top: 12px; border: 1px solid #333;"><p>Ihr Browser unterstützt das canvas-Element leider nicht.</p></canvas> <script type="text/javascript"> <!-- // Sicherungsstring var strSave = ""; var objCanvas = null; var objContext = null; function drawIt(){ objCanvas = document.getElementById("canvas_id"); // Falls das Objekt unterstützt wird if(objCanvas.getContext){ // Kontext objContext = objCanvas.getContext('2d'); someRects(); }else{ // Sonstiger Code } } function someRects(){ objContext.fillStyle = "#f00"; objContext.fillRect(0, 0, 50, 50); objContext.fillStyle = "#000"; objContext.translate(25, 25); objContext.save(); objContext.rotate(Math.PI/4); objContext.fillRect(-18, -18, 36, 36); objContext.restore(); objContext.fillStyle = "#fff"; objContext.fillRect(-10, -10, 20, 20); objContext.translate(-25, -25); } function saveRects(){ // ImageData-Objekt des aktuellen Canvas-Zustands erstellen var objImageData = objContext.getImageData(0, 0, objCanvas.width, objCanvas.height); // Sicherungsstring generieren (über for und String wg. Opera) var strSerialize = ""; for(var i=0; i<objImageData.data.length; i++){ strSerialize += objImageData.data[i].toString() + ","; } strSerialize = strSerialize.substring(0, strSerialize.length-1); // Testausgabe und Testspeichern document.getElementById("outID").innerHTML = "Sicherungsstring = " + strSerialize; strData = strSerialize; // TODO: Sicherungsstring (strSerialize) speichern - z.B. über AJAX in Datenbank } function restoreRects(){ // Image-Daten-Objekt erstellen var objImageData = objContext.getImageData(0, 0, objCanvas.width, objCanvas.height); // Wg. FF2 if(!window.opera){ var objElem = objCanvas.cloneNode(true); objCanvas.parentNode.replaceChild(objElem, objCanvas); objCanvas = objElem; objContext = objCanvas.getContext('2d'); } // Werte des gespeicherten Strings in Array var arrData = String(strData).split(","); // data-Array des Objekts durchlaufen for(var i=0; i<objImageData.data.length; i++){ // Integerwerte des Sicherungsarrays zurückschreiben objImageData.data[i] = parseInt(arrData[i]); } // Objekt wieder in Canvas rendern objContext.putImageData(objImageData, 0, 0); } window.onload = function(){ drawIt();} //--> </script> <div> <button onclick="saveRects();">save</button> <button onclick="objContext.clearRect(0, 0, 50, 50);">clear</button> <button onclick="restoreRects();">restore</button> </div> <div id="outID"></div> </body> </html>
QuaeseVielleicht muss man manchmal vom Weg abkommen, um nicht auf der Strecke zu bleiben!
----
Der "Fortsetzungsroman" auf www.leuteforum.de
New kind to realize large scalable projects with jQuery: jQuery SDK
-
Moin,
gemacht hab ich damit noch nichts, aber etwas gefunden, was dich ruhiger schlafen lässt
http://www.nihilogic.dk/labs/canvas2image/
Eine gute Einführung zum Thema:
http://www.ajaxschmiede.de/canvas/ei...ung-in-canvas/
Und etwas, was mich davon überzeugt, dass ich mir das auch mal näher anschauen muss
http://www.nihilogic.dk/labs/mariokart/
-
Habe ich auch gefunden, nur wird hier die Datei an den Client ausgegeben und
ich möchte ja wie gesagt die Datei auf dem Server ablegen. Oder sehe ich hier
nur die Möglichkeit einer Abwandlung nicht?
Ja in der Tat, ich habe gestern noch viele andere wirklich interessante Sachen zum Thema gefunden.
Danke Quaese für das Beispiel! An etwas in der Richtung hatte ich gedacht.
Mittlerweile aber auch herausgefunden (noch nicht getestet) dass ich mir eine
DataURL per objCanvas.toDataURL() erzeugen lassen kann.
Speichern würde ich den String dann in einer Datenbank (per Ajax an ein Script
übergeben usw..). Nur dachte ich es gibt evtl eine Möglichkeit eine "echte" Grafik
zu erzeugen, vllt eher ein Problem der Weiterverarbeitung auf PHP Seite. Gibt
es eine Möglichkeit Daten von Javascript an PHP so zu übergeben dass ich mit
PHP eine ImageResource erstellen kann oder bleibt nur die Möglichkeit einen
String in der Datenbank zu speichern?Geändert von versuch13 (09.08.08 um 11:45 Uhr)
-
Naja, man könnte es ja folgendermaßen probieren:
Dieser String enthält ja 3 Sachen, den Grafik-Typ, die Art der Kodierung und den kodierten String.
Es sollte gehen, wenn man die ersten beiden Sachen herausschnibbelt, das kodierte wieder dekodiert und dann in einer Datei speichert.
-
Ok, danke, ich war nur nicht sicher wie der dataURL String kodiert ist (aber Wikipedia wußte es) und so werde ich es dann auch versuchen. Ergebnis werde ich hier dann nochmal veröffentlichen. Bis dahin schon mal wieder recht herzlichen Dank!
Hier eine mögliche Lösung: http://canvaspaint.org/blog/2007/01/saving-imagesGeändert von versuch13 (23.09.08 um 20:05 Uhr)
-
So, ich hole das Thema nochmal hoch. Ich habe es wie erwähnt gelöst, jetzt besteht nur das Problem das Safari die Methode toDataURL() nicht unterstützt. Hat jemand dazu eine Idee oder bleibt es für Safari unmöglich?
Ähnliche Themen
-
Viertelkreise mit JS und Canvas
Von ComFreek im Forum Javascript & AjaxAntworten: 7Letzter Beitrag: 16.08.10, 15:18 -
Canvas
Von Underscore im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 12.09.09, 19:00 -
3d Canvas wie boolea ich?
Von Ibrahim im Forum BlenderAntworten: 3Letzter Beitrag: 04.10.06, 01:08 -
<canvas> html Tag
Von tobee im Forum HTML & XHTMLAntworten: 2Letzter Beitrag: 24.08.06, 12:45 -
3D Canvas...
Von Mailyn im Forum Sonstige Grafik-ProgrammeAntworten: 0Letzter Beitrag: 25.09.05, 18:19





Zitieren


Login





