img标签中的SVG完全透明 [英] SVG entire transparent in img tag

查看:31
本文介绍了img标签中的SVG完全透明的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个奇怪的问题,我想屏蔽图像,为了简单起见,我尝试了 svg 方式,如下所示:

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="217.714"height="321.143" viewBox="0 0 58 85"><定义><掩码 id="a"><path d="M22.5 0L45 31.5 22.5 63 0 31.5z" fill="#fff"/></掩码></defs><image xlink:href="https://upload.wikimedia.org/wikipedia/commons/9/97/The_Earth_seen_from_Apollo_17.jpg" mask="url(#a)" preserveAspectRatio="xMidYMid slice" width="45"height="63" transform="translate(6.5 14.5)"/></svg>

我的问题是当我嵌入这个图像时,它似乎是透明的.当我在浏览器中打开它时,它按预期工作.但是,当我使用 <img src="my.svg"> 之类的 img 标签添加它时,它采用 svg 中定义的尺寸,但它是透明的.

我尝试上传 svg,但文件类型不受支持,因此我创建了一个

但是你可以通过一些技巧绕过它:

  1. 使用 new Image()
  2. 在内存中加载 IMG URL
  3. 将其转移到 CANVAS
  4. 从 CANVAS 中提取图像到 DataURL 字符串
  5. 将完整的 SVG DataURI string(不是 SVG 文件的 url)写入您的 hostIMG src

使用 W3C 标准自定义元素,您可以将其用作:

<masked-img src="https://i.picsum.photos/id/21/200/200.jpg" mask="circle"></masked-img>

JSFiddle 位于:https://jsfiddle.net/CustomElementsExamples/cuwrm7ba/