javascript - 用本地镜像填充 svg 元素

标签 javascript html file svg input

我想填充一个 svg 元素,例如一个circle带有图像的元素,用户可以通过 <input type='file'/> 从他的本地计算机中选择该图像输入。

我知道您可以使用模式填充 svg 元素:

<defs>
  <pattern id="img1" patternUnits="userSpaceOnUse" width="100" height="100">
    <image xlink:href="wall.jpg" x="0" y="0" width="100" height="100" />
  </pattern>
</defs>
<circle cx=100 cy=100 r=100 fill="url(#img1)" />

但我无法让它与本地镜像一起工作。

一个能用的 fiddle 会很棒 :)

相关问题:

Fill SVG path element with a background-image

Open local image in canvas

谢谢!

最佳答案

这似乎适用于最新的 Chrome 和 Firefox。

首先,HTML部分:

<input id="upload" type="file"/>

<svg>
    <defs>
        <pattern id="img1" patternUnits="userSpaceOnUse" width="100" height="100">
            <image xlink:href="wall.jpg" x="0" y="0" width="100" height="100" />
        </pattern>
    </defs>
    <circle cx=100 cy=100 r=100 fill="url(#img1)" />
</svg>

接下来,JS部分:

var upload = document.getElementById('upload');
var patternImage = document.querySelector('#img1 image');
var currentBlobData = null;

upload.addEventListener('change', function (e) {
    var file = this.files[0];
    if (currentBlobData) {
        URL.revokeObjectURL(currentBlobData);
    }
    currentBlobData = URL.createObjectURL(file);
    patternImage.setAttribute('xlink:href', currentBlobData);
});

最后,一个有效的 fiddle 演示:https://jsfiddle.net/5qLb9m1t/

关于javascript - 用本地镜像填充 svg 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37321736/

相关文章:

javascript - Globalize.js - cldr.once 不是函数

javascript - 有什么方法可以从 HTML 文档中删除 javascript 代码吗?

html - 药丸选项卡面板中的嵌套选项卡在 Bootstrap 中不起作用

javascript - 处理背景色覆盖时边框底部不起作用

javascript - 为什么我在 select2 : Uncaught TypeError: Cannot read property 'hasClass' of null? 上遇到这个 javascript 异常

html - 如何使 DIV 宽度灵活到视口(viewport)的宽度

html - 邮件页脚签名中的 MsoNormal。如何去除?

c++ - 在 C++ 中使用静态类

java - Play Framework : Post image to imageshack using WS

c - 如何声明指向文件的动态指针数组