Warum die "Bilder" fehlen
RaphaelJS zieht mit SVG so Ihre c1, c2 Zeichnungen sind nicht wirklich Bilder - sie SVG sind.
Das Problem ist, dass SVG gezeichnet auf HTML5 Canvas eine Sicherheitseinschränkung auslöst, die wiederum den Export der Leinwand in ein Bild (context.toDataURL
ist deaktiviert, wenn die Leinwand ist verdorben).
Dies bedeutet Canvas2Image kann nicht Ihre c1, c2 Bild-Svgs anzeigen.
Eine Abhilfe
Zuerst Ihren Hintergrund auf Ihrer Haupt-Leinwand ziehen.
context.drawImage(bkImage,0,0);
Zweitens konvertieren Sie Ihre RaphaelJS Zeichnungen in ein realen Bilder (nicht SVG) und sie auf der großen Leinwand ziehen.
Exportieren Sie eine Ihrer RaphaelJS-Zeichnungen (entweder C1 oder C2) als SVG. Eine Bibliothek, die nach SVG exportiert, ist Raphael.Export
Konvertieren Sie das SVG (von # 1) in html5 Canvas Zeichenbefehle. [Siehe # 3 für eine Möglichkeit, Svg in Canvas-Befehle zu konvertieren].
Zeichnen Sie die Befehle (von # 2) auf ein separates HTML5 Canvas. Eine Bibliothek, die SVG in Canvas-Befehle (== # 2) konvertiert und sie ebenfalls nach Canvas (== # 3) zeichnet, ist canvg.
Erstellen Sie ein ImageObject aus der separaten Zeichenfläche (aus # 3). Sie können den nativen Befehl Html5 Canvas canvas.toDataURL()
verwenden, um eine Daten-URL zu erstellen, die als image.src für ein neues imageObject verwendet werden kann.
var c1 = new Image;
c1.src = secondCanvas.toDataURL();
ziehen, dass reelles Bild auf Ihre Haupt-Leinwand.
context.drawImage(c1,0,0);
Repeat # 1-5 mit c2.
Schließlich, da Sie nun sicherheitskonforme Bilder (nicht SVG) haben, können Sie Ihren Canvas-Inhalt direkt in ein Bild exportieren (wiederum mit context.toDataURL
). Sie werden Canvas2Image nicht einmal benötigen, wenn Ihr div nur das Hintergrundbild plus c1, c2 enthält.
Eine mögliche einfachere Alternative
SVG und Canvas Zeichenbefehle sind sehr ähnlich. Wenn c1, c2 nicht auf nicht zeichnenden RaphaelJS-Methoden beruhen, können Sie relativ einfach c1, c2 mit nativen Canvas-Zeichnungsbefehlen zeichnen (Raphael ganz umgehen).
Ein zukünftig alternativ
Sowohl SVG und Canvas haben bemerkenswert ähnliche Zeichnung Fähigkeiten.
Aber SVG fügt vollständige DOM-Funktionen - vollständige HTML-Element Ereignisse & Eigenschaften. Und Canvas konzentriert sich auf Rendering-Geschwindigkeit - Rendering Hunderte von Formen mit 60 Bildern pro Sekunde.
Die Organisation, die empfiehlt, wie Browser (W3C) erhält den RFP über making SVG & Canvas drawings compatible
jedoch SVG-Canvas Interaktivität derzeit nicht verfügbar ist.
Vielen Dank für Ihre Hilfe, ich werde versuchen, es zu verwenden :) – natsu
Ich kann diese Methode nicht verwenden :(, weil ich juste c1 und c2 src nicht verwenden kann. C1 und c2 können drehen oder vergrößern/verkleinern. Ich versuche viele Funktionen und Methoden, aber ich kann nicht das gleiche Basisbild mit c1, c2 auf einem einfachen png Kennen Sie eine Technologie, um Screenshot mit div und alle Inhalte zu machen? Ich weiß wkhtmltopdf, aber es ist für die gesamte Seite ... danke dir – natsu
Wenn du auch skalieren oder drehen musst, kannst du [html5 canvas transformationen] verwenden (https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Transformations) ('context.scale' und' context.rotate'), um Ihre SVG zu zoomen und zu rotieren, während sie in .PNGs umgewandelt werden. Nein, es gibt keine eingebaute Fähigkeit, ein div zu scannen. Diese Unfähigkeit gilt für se curity-Gründe - Sie möchten nicht, dass ein Hacker ein Bild Ihrer Bankdaten erfasst. – markE