Obtenir SVG à partir d'une toile de l'élément et l'enregistrer

Actuellement, je suis en création d'une petite application pour un ami, dont le départ de son Doctorat, et a besoin de construire un réseau de graphiques. Jusqu'à présent, tout fonctionne très bien à l'aide de la Force de graphe orienté. Les graphiques des nœuds peut être déplacé dans le style de la mise en page.

Obtenir SVG à partir d'une toile de l'élément et l'enregistrer

La chose que je ne peux pas obtenir ma tête autour de est:

»comment extraire les données à partir de la toile et l'enregistrer dans un fichier SVG«.

Ce que j'ai essayé:

J'ai déjà essayé d'accéder aux Données d'image à partir de la console avec

var app.canvas = document.getElementById( 'graph-canvas' )
    .getContext( '2d' )
        .getImageData( 0, 0, 200, 200 );

et a obtenu un (object) ImageData en retour. Maintenant, je peux accéder à l' ↑ le montre les données du canevas avec app.canvas.data. (Quand j'ai essayer aussi de regarder les valeurs, le navigateur commence la pendaison et demande si le script doit être arrêté - Chrome & FF les plus récentes).

Comment pourrais-je aller à partir d'ici pour obtenir le SVG dessiné puis sauvé par le clic d'un bouton?

EDIT:

Jusqu'à présent, j'ai trouvé comment dessiner le SVG et ajouter un image/png élément. Comment jamais, il n'est pas de l'affichage.

//Add the test SVG el:
var svg = document.createElementNS( "http://www.w3.org/2000/svg", "svg" );
svg.setAttribute( 'style', 'border: 1px solid black;' )
        .setAttribute( 'width', '600' )
        .setAttribute( 'height', '400' )
        .setAttributeNS(
            'http://www.w3.org/2000/xmlns/',
            'xmlns:xlink',
            'http://www.w3.org/1999/xlink'
        );

//Call
importCanvas( document.getElementById( 'infovis-canvas' ), svg ); 

//Function: Add data to SVG
function importCanvas( sourceCanvas, targetSVG ) 
{
    //get base64 encoded png data url from Canvas
    var img_dataurl = sourceCanvas.toDataURL( "image/png" );

    var svg_img = document.createElementNS(
        "http://www.w3.org/2000/svg",
        "image"
    );

    svg_img.setAttributeNS(
        'http://www.w3.org/1999/xlink',
        'xlink:href',
        img_dataurl
    );
    jQuery( targetSVG.appendChild( svg_img ) )
        .appendTo( '#graph-container' );

    console.log( 'done' ); //Log & confirm
}

Et enfin la...

//...resulting SVG element containing the image element
<svg style="border: 1px solid black;" width="600" height="400" xlink="http://www.w3.org/1999/xlink"><image href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAA(...)

L'INTERFACE fonctionne avec jQuery UI, jQuery et le Le Jit/InfoVIZ de la bibliothèque, de sorte que ceux-ci sont disponibles.

  • pourrait aider svgopen.org/2010/papers/62-From_SVG_to_Canvas_and_Back
  • Merci donnera une lecture. Jusqu'à présent, j'ai accès aux données (voir mise à jour).
  • double possible de Exporter KinteticJS dessin SVG?
  • Pas de. C'est à propos de l'exportation, de la toile bitmap au format SVG. KineticJS est un vecteur, qui est mort simple à l'exportation. Aussi simple que explorent de PNG à partir ↑.
  • Merci pour la clarification; de sorte que la question était vraiment "Comment afficher une image bitmap en SVG" et "Comment puis-je créer une image à partir d'une Toile".
  • N/P. Proximité: Le Q est »Comment créer un SVG vecteur d'image à partir d'une image de la toile élément?« - Point, c'est que j'ai pensé lors de la demande d'abord que chaque toile seules Données SVG. Mon défaut :/

InformationsquelleAutor kaiser | 2012-04-23