2009-03-11 11 views
5

Vì vậy, tôi cần phải lưu dữ liệu hình ảnh được vẽ trên phần tử <canvas>. Và có phương thức toDataURL() hoạt động trong hầu hết các trình duyệt hiện đại.Internet Explorer toDataURL() thay thế?

Ngoại trừ ... bạn đã đoán ... Internet Explorer.

Tôi đã tìm kiếm trên Internet nhưng ở mọi nơi mọi người nói rằng tôi nên sử dụng SVG/VML để lưu dữ liệu, nhưng họ chưa bao giờ đề cập đến cách thực hiện. Tôi không có kinh nghiệm với SVG/VML trong IE, vậy làm cách nào để lưu hình ảnh được vẽ trong phần tử canvas trong Internet Explorer? Có ai có kinh nghiệm không?

Hiện tại, tôi phải sao chép mã vẽ trên cả máy khách và trên máy chủ đang bắt đầu phức tạp. Vì vậy, nếu có một cách tôi có thể trích xuất hình ảnh được vẽ trên thẻ canvas trên phía máy khách (hoặc máy chủ) mà chắc chắn sẽ giúp.

Cảm ơn!

Trả lời

1

Bạn có thể có được VML và giống như vậy, nhưng đó là định dạng XML, vì vậy đó có thể không phải là những gì bạn muốn. Không có cách nào bạn có thể nhận được một hình ảnh từ IE mà không cần sử dụng một plug-in.

+1

Có một cách dễ dàng để chuyển đổi VML đến một bmp hoặc png? –

3
  1. canvas.toDataURL hoạt động trong IE9.

  2. Nếu bạn thực sự cần nó cho IE cũ .. cũng .. tôi sẽ chỉ cung cấp cho bạn một báo

toDataURL sẽ không được hỗ trợ vì bản chất của phương pháp này được sử dụng bởi Trình khám phá Canvas: VML. Chúng tôi đã không tìm cách để rasterize VML thành bitmap hình ảnh bằng cách sử dụng JS và thậm chí không phải với tập lệnh phía máy chủ. Vì vậy, nếu bạn thực sự cần phảiDataURL trong IE, bạn sẽ phải sử dụng FxCanvas (http://code.google.com/p/fxcanvas/) hoặc FlashCanvas (http://flashcanvas.net/): hai giải pháp dựa trên Flash.

http://code.google.com/p/explorercanvas/issues/detail?id=77

2

tôi đã cùng một vấn đề. Những gì tôi muốn làm là chuyển đổi khung hình thành một hình ảnh, sau đó mở nó trong một tab mới. Tôi thấy rằng chuyển đổi nó không phải là vấn đề, nhưng mở trong một liên kết mới là. Tôi đã giải quyết nó bằng cách tạo ra hình ảnh, đặt nó vào một thẻ img, sau đó bao gồm nó trong trang mới. sau đó tôi mở cho biết trang mới sử dụng hướng dẫn này - http://www.javascripter.net/faq/writingt.htm

Đây là những gì tôi đã làm

var canvas = document.getElementById('canvas1'); 
var dataURL = canvas.toDataURL(); 
var width = parseInt($("#main").width()); //main is the div that contains my canvas 
var height = parseInt($("#main").height()); 
newWindow("<img src=\"" + dataURL + "\"/>"); 
function newWindow(content) { 
    top.consoleRef = window.open("", "Organisational Structure", 
     "width="+width+",height="+height 
     + ",menubar=0" 
     + ",toolbar=1" 
     + ",status=0" 
     + ",scrollbars=1" 
     + ",resizable=1") 
    top.consoleRef.document.writeln(
     "<html><head><title>Console</title></head>" 
     + "<body bgcolor=white onLoad=\"self.focus()\">" 
     + content 
     + "</body></html>" 
    ) 
    top.consoleRef.document.close() 
} 
+0

Đây là giải pháp tuyệt vời từ quan điểm của tôi. Điều duy nhất tôi có vấn đề là trong IE9, tôi đã phải sử dụng một chuỗi rỗng làm tham số thứ hai để window.open khi việc sử dụng giá trị "Cấu trúc tổ chức" gây ra lỗi trong IE9. – MartynJones87