【问题标题】:Safari createPattern fails with SVGs: suggestions for alternatives?Safari createPattern 因 SVG 而失败:替代方案的建议?
【发布时间】:2015-06-29 21:10:22
【问题描述】:

我使用 SVG 图像作为 HTML5 画布元素的背景图案,使用以下语法:

var img = new Image();
img.onload = function() {
    var pattern = badge.createPattern(img, 'repeat');
    badge.fillStyle = pattern;
    // draw 'badge' shape
    badge.fill();
    };  
img.src = '../flags/iso/'+country+'.svg';

这在 Firefox 和 Chrome 中按预期工作,但在 Safari (7.0.3) 中,背景为空白(白色)。在 Safari 等中使用 png 或 jpg 作为背景图像可以正常工作 - 只有 SVG 渲染不正确。

感谢您的指点。还有许多其他关于 Safari SVG 错误的报告,但我不确定这是特定于那个,还是与 Canvas 实现有关。

更新:这是a previously reported bug in Safari,但似乎没有采取任何行动。问题是使用 SVG 创建模式。

如果 Safari 无法使用 createPattern 加载 SVG,是否有其他替代方法可以将图像加载到画布中的不规则形状(多边形)中,作为背景图像?

【问题讨论】:

标签: javascript html canvas svg safari


【解决方案1】:

可能的解决方法

您可以尝试先通过画布从 SVG 创建位图图像,然后将该画布用作图案的图像源:

var img = new Image();
img.onload = function() {

    // canvas image source for pattern:    
    var svgCanvas = document.createElement("canvas");
    svgCanvas.width = this.width;
    svgCanvas.height = this.height;

    // draw in the SVG to canvas
    var svgCtx = svgCanvas.getContext("2d");
    svgCtx.drawImage(this, 0, 0, this.width, this.height);

    // use canvas as image source instead
    var pattern = badge.createPattern(svgCanvas, 'repeat');
    badge.fillStyle = pattern;

    // draw 'badge' shape
    badge.fill();
};  
img.src = '../flags/iso/'+country+'.svg';

【讨论】:

  • 像魅力一样工作,谢谢。这也解决了我在调整背景图像大小时遇到​​的后续问题,非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-26
  • 1970-01-01
  • 1970-01-01
  • 2015-09-08
  • 2017-10-30
相关资源
最近更新 更多