2013-01-31 40 views
9

Tôi đã có biểu đồ được tạo bằng thư viện Javascript D3 và tôi cần lưu các tệp này vào tệp PNG hoặc SVG.Lưu <svg> HTML5 vào PNG hoặc hình ảnh

Có thư viện nào thực hiện công việc không?

Tôi thấy điều này https://github.com/sampumon/SVG.toDataURL nhưng không được làm việc trên html5 tôi, trong firefox console tôi đã nhận lỗi này:

NS_ERROR_NOT_AVAILABLE: Hợp phần không có sẵn [Interrompi mỗi questo errore]

ctx.drawImage (img, 0, 0);

+2

Dưới đây là ví dụ về cách làm điều đó với Chrome: http://bl.ocks.org/3831266 – Duopixel

+0

cảm ơn! điều này đang làm việc ... nhưng khi tôi cố gắng để mở tập tin trong illustrator nó yêu cầu tôi để xác nhận các tập tin.Tôi có thông báo này: svg này là không hợp lệ. Xác thực trước khi mở. –

+0

Tìm trình xác thực XML và đảm bảo đó là XML hợp lệ. Nếu mọi thứ có vẻ ok, sau đó đăng mã trong câu hỏi của bạn và tôi có thể giúp bạn tìm ra lỗi gây ra Illustrator cho chuyến đi. – Duopixel

Trả lời

1

kịch bản phương pháp Server-side

Dưới đây là một phương pháp đơn giản để tiết kiệm các yếu tố svg để png (mặc dù nó sử dụng server-side scripting, có thể khác với những gì bạn mong muốn): Thanh toán this page.

Theo tài liệu của tác giả, khách hàng trích xuất phần tử svg (sử dụng XMLSerializer.serializeToString) và gửi nó đến máy chủ; máy chủ chuyển đổi nó thành png và gửi lại cho máy khách. Máy chủ có thể sử dụng bất kỳ chương trình nào thuận tiện (chuyển đổi rsvg trong trường hợp này).

Canvg thư viện

Bạn có thể sử dụng thư viện này để làm điều này về phía khách hàng (check it out!):

canvg is a SVG parser and renderer. It takes a URL to a SVG file or the text of an SVG file, parses it in JavaScript, and renders the result on a Canvas element

Sử dụng nó như thế này:

//load a svg snippet in the canvas with id = 'drawingArea' 
canvg(document.getElementById('drawingArea'), '<svg>... </svg>') 

Sau đó, bạn có thể sử dụng phương pháp toDataURL: document.getElementById('drawingArea').toDataURL('image/png');

1

Ví dụ phong phú từ developer.mozilla.org chứng minh cách xuất khẩu svg sang png sử dụng phần tử canvas.

var canvas = document.getElementById('canvas'); 
var ctx = canvas.getContext('2d'); 

var data = '<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200">' + 
      '<foreignObject width="100%" height="100%">' + 
      '<div xmlns="http://www.w3.org/1999/xhtml" style="font-size:40px">' + 
      '<em>I</em> like ' + 
      '<span style="color:white; text-shadow:0 0 2px blue;">' + 
      'cheese</span>' + 
      '</div>' + 
      '</foreignObject>' + 
      '</svg>'; 

var DOMURL = window.URL || window.webkitURL || window; 

var img = new Image(); 
var svg = new Blob([data], {type: 'image/svg+xml'}); 
var url = DOMURL.createObjectURL(svg); 

img.onload = function() { 
    ctx.drawImage(img, 0, 0); 
    DOMURL.revokeObjectURL(url); 
    var png_img = canvas.toDataURL("image/png"); 
} 

img.src = url; 
Các vấn đề liên quan