在 Firefox 中的画布上下文对象上使用 svg 调用 drawImage() 时出现问题

Posted

技术标签:

【中文标题】在 Firefox 中的画布上下文对象上使用 svg 调用 drawImage() 时出现问题【英文标题】:Problems calling drawImage() with svg on a canvas context object in Firefox 【发布时间】:2014-06-24 06:15:05 【问题描述】:

我基本上想将我的 SVG 转换为 PNG 图像。因此,我将 SVG 转换为 SVG 图像并尝试在画布上绘制它,以便能够通过 toDataURL() 方法将其作为 PNG 获取。这在 Chrome 中可以正常工作,但在 Firefox 中会产生一个非常无意义的错误:NS_ERROR_NOT_AVAILABLE

在搜索和试验了一下之后,我尝试了一个不同的 SVG 源,突然一切都正常了。有什么想法可能导致该方法对第一个 SVG 字符串正常工作但对第二个字符串失败?如何更改我的 SVG 以使其正常工作?

小提琴: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);

【问题讨论】:

【参考方案1】:

为外部<svg> 元素添加宽度属性。例如。宽度=“450”

第一种情况有宽度和高度,第二种只有高度,Firefox 目前需要同时存在宽度和高度。

【讨论】:

没有怪异的方式... :D 非常感谢!我搜索了几个小时,最后它是一个愚蠢的宽度属性......你为我节省了更多宝贵的时间,伙计。抱歉,我还不能投票...

以上是关于在 Firefox 中的画布上下文对象上使用 svg 调用 drawImage() 时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

单击画布中的地图

如何在 HTML5 画布上绘图

画布上的drawImage在Firefox中具有奇怪的纵横比和其他问题

更改画布宽度/高度时,将重置画布上下文

在第一次加载或使用ctrl + f5重新加载时在firefox上的画布上绘制图像不起作用

如何使 Firefox 的画布与基于 Chromium 的浏览器中的行为相同?