2009-03-11 15 views
5

Muszę więc zapisać dane obrazu rysowane na elemencie <canvas>. Istnieje również metoda toDataURL(), która działa w większości nowoczesnych przeglądarek.Internet Explorer toDataURL() alternatywa?

Oprócz ... zgadłeś ... Internet Explorer.

Przeszukałem internet, ale wszędzie ludzie mówią, że powinienem używać SVG/VML do zapisywania danych, ale nigdy nie wspominają o tym. Nie mam żadnego doświadczenia z SVG/VML w IE, więc jak zapisać obraz narysowany w elemencie canvas w Internet Explorerze? Czy ktoś ma doświadczenie?

W tym momencie musiałem skopiować kod rysunku zarówno na kliencie, jak i na serwerze, który zaczyna się komplikować. Więc jeśli istnieje sposób, w jaki mógłbym wyodrębnić obraz narysowany na tagu canvas po stronie klienta (lub serwera), który z pewnością pomógłby.

Dzięki!

Odpowiedz

1

Możesz być w stanie uzyskać VML i to samo, ale jest to format XML, więc prawdopodobnie nie jest to, czego potrzebujesz. Nie ma sposobu, aby uzyskać obraz z IE bez używania wtyczki.

+1

Czy istnieje prosty sposób do konwersji VML do BMP lub PNG? –

3
  1. canvas.toDataURL działa w IE9.

  2. Jeśli naprawdę potrzebujesz go do starego IE .. dobrze .. będę po prostu dać cytat

toDataURL nie będą obsługiwane ze względu na charakter metody zastosowanej przez Canvas Explorera: VML. Nie znaleźliśmy sposobu na rasteryzację VML do obrazów bitmapowych przy użyciu JS, a nawet bez skryptu po stronie serwera. Tak więc, jeśli naprawdę potrzebujesz pliku dashURL w IE, będziesz musiał użyć FxCanvas (http://code.google.com/p/fxcanvas/) lub FlashCanvas (http://flashcanvas.net/): dwa rozwiązania w oparciu o Flash.

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

2

miałem ten sam problem. Chciałem przekształcić płótno na obraz, a następnie otworzyć go w nowej karcie. Odkryłem, że konwersja nie była problemem, ale otwarcie w nowym łączu było. Rozwiązałem go, generując obraz, umieszczając go w tagu img, a następnie włączając go na nowej stronie. I powiedział, po czym otworzył nową stronę za pomocą tego samouczka - http://www.javascripter.net/faq/writingt.htm

Oto co zrobiłem

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

To jest świetne obejście z mojego punktu widzenia. Jedyną rzeczą, z którą miałem problem był IE9, musiałem użyć pustego ciągu jako drugiego parametru do window.open, ponieważ użycie wartości "Organization Structure" spowodowało błąd w IE9. – MartynJones87

Powiązane problemy