Javascript 将图像复制到剪贴板

Javascript 将图像复制到剪贴板,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我有一个图像作为DataURL字符串 我想通过编程将此图像复制到剪贴板 我发现了两个函数,但它们都不起作用。 不过,当您复制文本时,第一个函数工作得很好-复制(“Hello!”,“text”) PS我有“剪贴簿”权限 第一: function copy(str, mimetype) { document.oncopy = function(event) { event.clipboardData.setData(mimetype, str); event.

我有一个图像作为DataURL字符串
我想通过编程将此图像复制到剪贴板

我发现了两个函数,但它们都不起作用。 不过,当您复制文本时,第一个函数工作得很好-复制(“Hello!”,“text”)

PS我有“剪贴簿”权限

第一:

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');
}

您可以使用以下方法将图像转换为字符串:

function getImageData(img) {
    var canvas = document.createElement("canvas");
    canvas.width = img.width;
    canvas.height = img.height;
    var ctx = canvas.getContext("2d");
    ctx.drawImage(img, 0, 0);
    var imgd = canvas.toDataURL("image/png");
    return imgd;
}

要复制到剪贴板,请尝试此解决方案。

//使用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);

看来这是不可能的。自2012年以来,Chrome中就有一个bug阻止了它

如果碰巧使用html2canvas,可以这样做:
这会将带有html2canvas的内容转换为画布,然后生成其图像,然后将其作为png保存到剪贴板。比如说,

HTML:
你好,世界

JavaScript:

$("#copyToImage").click(function() {
    html2canvas(document.querySelector("#copyToImage")).then(canvas => canvas.toBlob(blob => navigator.clipboard.write([new ClipboardItem({'image/png': blob})])));
});

可能与mime类型有关?我尝试了各种类型,但都没有成功。您可能需要对图像进行编码,然后复制它。我认为至少有一种类型可以工作,但剪贴板数据在应用程序之间并不总是兼容的。如果我选择上面带有图标的“google chrome”标签,当我粘贴到Gmail(同一浏览器)而不是TextEdit(OS X应用程序)时,图标会出现。请仔细阅读tmy问题。我知道如何将图像编码为DataURL,我知道如何复制文本。问题是复制图像而不是字符串。我知道,这就是我告诉你的原因。你可以用这个功能将图像转换成文本,然后复制文本。这不是你的问题吗?不,我不想复制文本,我想复制图像。可以粘贴到任何图形编辑器中的真实图像。正如我在问题中所说,复制文本不是问题。Java不是javascriptYeah,与Chrome扩展无关。