gpt4 book ai didi

javascript - 将 SVG 作为图像复制到剪贴板

转载 作者:行者123 更新时间:2023-12-05 07:00:27 25 4
gpt4 key购买 nike

我正在开发一个应用程序,我想为 svg 提供一个复制按钮,将其作为图像复制到剪贴板,然后粘贴到其他地方。

我尝试使用剪贴板 API,但它有很多安全限制,而且它似乎不适用于 http 并且仅适用于 png。

我还通过使用图像创建一个 div 来尝试 document.execCommand('copy') 但它只在 MS Word 中对我有效,但在 slack 或堆栈溢出中无效(不知道为什么) .

我想通过 Javascript 复制 chrome/firefox 右键单击​​上下文菜单的复制图像选项的行为。

有什么办法可以做到吗?我对所有想法持开放态度。谢谢!

最佳答案

只是一些提示,而不是实际答案。我使用评论中的信息设置了一个本地示例:

<!DOCTYPE html>
<html>
<body>
<canvas id="myCanvas" style="border:2px solid green;" width="300" height="300">
</canvas>
<script>
function copyCanvas() {
let canvas = document.getElementById('myCanvas');
canvas.toBlob(function (blob) {
let data = [new ClipboardItem({ [blob.type]: blob })];

navigator.clipboard.write(data).then(function () {
alert('Copied');
}, function (err) {
alert('Not copied');
})
});
}

let canvas = document.getElementById('myCanvas');
let ctx = canvas.getContext('2d');
var data = `<svg xmlns="http://www.w3.org/2000/svg" width="300"
height="200">' +
'<foreignObject width="100%" height="100%">' +
'<div xmlns="http://www.w3.org/1999/xhtml" style="font-size:50px">' +
'Simply Easy ' +
'<span style="color:blue;">' +
'Learning</span>' +
'</div>' +
'</foreignObject>' +
'</svg>`;
var DOMURL = window.URL || window.webkitURL || window;
var img1 = new Image();
var svg = new Blob([data], {type: 'image/svg+xml'});
var url = DOMURL.createObjectURL(svg);
img1.onload = function() {
ctx.drawImage(img1, 25, 70);
DOMURL.revokeObjectURL(url);
}
img1.src = url;
setTimeout(copyCanvas, 3000);
</script>
</body>
</html>

这行不通,但它可能是一个开始。如果直接调用 copyCanvas(),没有 setTimeout,我会在 Chrome 中得到一张大小合适的黑色图片。我认为这意味着 Canvas 仍未绘制。随着延迟, Canvas 显示图片,但我收到一条错误消息,说它不能用 toBlob 转换,因为它被污染了。这是解释here .如果可以在服务器中设置 CORS 策略,则可以避免这种污染。我仍然不确定该解决方案的可移植性。

关于javascript - 将 SVG 作为图像复制到剪贴板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64114156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com