复制图像到剪贴板

17

我有一个DataURL格式的图片字符串。
我想要通过编程的方式将这个图片复制到剪贴板中。

我找到了两个函数,但都无法正常工作。 不过第一个函数在复制文本时可以正常使用 - copy("Hello!","text");

PS我有"clipboardWrite"权限。

第一个函数:

function copy(str, mimetype) {
    document.oncopy = function(event) {
        event.clipboardData.setData(mimetype, str);
        event.preventDefault();
    };
    document.execCommand("Copy", false, null);
}

其次:

function copyImage(url){
    var img=document.createElement('img');
    img.src=url;
    document.body.appendChild(img);
    var r = document.createRange();
    r.setStartBefore(img);
    r.setEndAfter(img);
    r.selectNode(img);
    var sel = window.getSelection();
    sel.addRange(r);
    document.execCommand('Copy');
}

1
可能与 MIME 类型有关? - tzengia
我尝试了各种类型,但都没有成功。 - holden321
你可能需要对图像进行编码,然后复制它。 - stevemao
1
我认为它们中至少有一个正在工作,但剪贴板数据并不总是在应用程序之间兼容。如果我选择上面带有"google-chrome"标签和图标的选项,在Gmail中(同一浏览器)粘贴时,该图标会出现,但在TextEdit(OS X 应用程序)中则不会出现。 - fregante
3个回答

3

2
如果使用html2canvas,可以按照以下方式完成:
将html2canvas转换为画布,然后生成其图像,并将其保存为png格式到剪贴板。例如,
HTML:
<div id="copyToImage">Hello World!</div> JavaScript:
$("#copyToImage").click(function() {
    html2canvas(document.querySelector("#copyToImage")).then(canvas => canvas.toBlob(blob => navigator.clipboard.write([new ClipboardItem({'image/png': blob})])));
});

-4

//使用Java Robot将图像复制到剪贴板

 Runtime.getRuntime().exec("mspaint.exe");
Thread.sleep(5000);
StringSelection x=new StringSelection("Location of Photo with format");
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(x,null);
Robot r=new Robot();
r.keyPress(KeyEvent.VK_CONTROL);
r.keyPress(KeyEvent.VK_O);
r.keyRelease(KeyEvent.VK_O);
r.keyRelease(KeyEvent.VK_CONTROL);
Thread.sleep(4000);
r.keyPress(KeyEvent.VK_CONTROL);
r.keyPress(KeyEvent.VK_V);
r.keyRelease(KeyEvent.VK_V);
r.keyRelease(KeyEvent.VK_CONTROL);
Thread.sleep(1000);
r.keyPress(KeyEvent.VK_ENTER);
r.keyRelease(KeyEvent.VK_ENTER);
Thread.sleep(5000);
r.keyPress(KeyEvent.VK_CONTROL);
r.keyPress(KeyEvent.VK_A);
r.keyRelease(KeyEvent.VK_A);
r.keyRelease(KeyEvent.VK_CONTROL);
Thread.sleep(5000);
r.keyPress(KeyEvent.VK_CONTEXT_MENU);
r.keyRelease(KeyEvent.VK_CONTEXT_MENU);
Thread.sleep(1000);
r.keyPress(KeyEvent.VK_DOWN);
r.keyRelease(KeyEvent.VK_DOWN);
r.keyPress(KeyEvent.VK_DOWN);
r.keyRelease(KeyEvent.VK_DOWN);
Thread.sleep(2000);
r.keyPress(KeyEvent.VK_ENTER);
r.keyRelease(KeyEvent.VK_ENTER);
Thread.sleep(2000);
r.keyPress(KeyEvent.VK_ALT);
r.keyPress(KeyEvent.VK_F4);
r.keyRelease(KeyEvent.VK_F4);
r.keyRelease(KeyEvent.VK_ALT);

2
Java不是JavaScript。 - Ryan Leach
是的,与Chrome扩展程序无关。 - Tim Dierks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接