2014-05-07 16 views
5

Tôi về cơ bản muốn chuyển đổi SVG của tôi thành hình ảnh PNG. Vì vậy, tôi biến SVG thành hình ảnh SVG và cố gắng vẽ hình ảnh đó trên canvas để có thể lấy nó dưới dạng PNG thông qua phương thức toDataURL(). Điều này làm việc tốt trong Chrome, nhưng trong Firefox nó tạo ra một lỗi rất không hợp lý: NS_ERROR_NOT_AVAILABLESự cố khi gọi drawImage() với svg trên đối tượng bối cảnh canvas trong Firefox

Sau khi tìm kiếm và thử nghiệm một chút, tôi đã thử một nguồn SVG khác và tất cả mọi thứ đột ngột hoạt động tốt. Bất kỳ ý tưởng nào có thể khiến phương thức hoạt động tốt cho chuỗi SVG đầu tiên nhưng không thành công cho chuỗi thứ hai? Làm thế nào tôi có thể thay đổi SVG để nó hoạt động?

Fiddle: http://jsfiddle.net/3AXwb/

var image = new Image(); 
image.src = 'data:image/svg+xml,' + escape(xml); 
image.onload = function() { 
    var canvas = document.createElement('canvas'); 
    canvas.width = image.width; 
    canvas.height = image.height; 
    var context = canvas.getContext('2d'); 
    document.getElementById('container').appendChild(canvas); 
    context.drawImage(image, 0, 0); 
} 

Trả lời

17

Thêm một thuộc tính chiều rộng đến <svg> yếu tố bên ngoài. Ví dụ. width = "450" ​​

Trường hợp đầu tiên có chiều rộng và chiều cao, chiều cao chỉ thứ hai và Firefox hiện cần cả chiều rộng và chiều cao.

+0

Không có cách nào lạ ...: D Cảm ơn bạn rất nhiều! Tôi đã tìm kiếm hàng giờ và cuối cùng nó là một tài sản chiều rộng ngu ngốc ... Bạn đã tiết kiệm cho tôi một số thời gian quý báu hơn, con người. Xin lỗi vì tôi chưa thể upvote ... – xJREB

+0

cảm ơn! điều đó không thể tin được: D – LorDex

Các vấn đề liên quan