Internet Explorer toDataURL() 的替代方法是什么?

5

我需要保存在<canvas>元素上绘制的图像数据。大多数现代浏览器都可以使用toDataURL()方法实现,但是...你猜对了...Internet Explorer不支持。

我在互联网上搜索过,但是所有人都说我应该使用SVG/VML来保存数据,但他们从未提到如何操作。我没有在IE中使用SVG/VML的经验,那么我该如何在Internet Explorer中保存在canvas元素上绘制的图像呢?有人有经验吗?

目前,我不得不在客户端和服务器端分别复制绘图代码,这开始变得复杂起来。因此,如果有一种方法可以在客户端(或服务器)上提取在canvas标签上绘制的图像,那肯定会有所帮助。

谢谢!

3个回答

3
  1. canvas.toDataURL在IE9中可用。

  2. 如果你真的需要它用于旧版IE,好吧,我只会给你一个引用:

由于Explorer Canvas使用的方法的本质是VML,因此toDataURL不会被支持。我们没有找到一种使用JS或甚至服务器端脚本将VML光栅化为位图图像的方法。因此,如果您确实需要在IE中使用toDataURL,则必须使用FxCanvas(http://code.google.com/p/fxcanvas/)或FlashCanvas(http://flashcanvas.net/):两个基于Flash的解决方案。

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


2
我遇到了同样的问题。我想要做的是将画布转换为图像,然后在新标签页中打开它。我发现转换不是问题,但在新链接中打开却是问题。我通过生成图像,将其放入img标记中,然后在新页面中包含该标记来解决了这个问题。我使用这个教程打开了新页面 - http://www.javascripter.net/faq/writingt.htm 以下是我的做法:
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()
}

这是我个人认为的一个很好的解决方法。唯一让我有问题的是在IE9中,我必须使用一个空字符串作为window.open的第二个参数,因为使用“组织结构”值会在IE9中引发错误。 - MartynJones87

1

你可能可以获取VML并保存,但那是一种XML格式,所以那可能不是你想要的。在不使用插件的情况下,没有办法从IE中获取图像。


1
有没有一种简单的方法将VML转换为BMP或PNG? - B T

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接