[英]Copy Image to Clipboard
I have an image as a DataURL string.我有一个图像作为 DataURL 字符串。
And I want to copy this image programmatically to ClipBoard.我想以编程方式将此图像复制到剪贴板。
I found two functions, but neither of them works.我找到了两个函数,但它们都不起作用。 Though, first function works well when you copy text - copy("Hello!","text");不过,当您复制文本时,第一个函数运行良好 - copy("Hello!","text");
PS I have a "clipboardWrite" permission. PS 我有“剪贴板写入”权限。
First:第一的:
function copy(str, mimetype) {
document.oncopy = function(event) {
event.clipboardData.setData(mimetype, str);
event.preventDefault();
};
document.execCommand("Copy", false, null);
}
Second:第二:
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');
}
Seems this isn't possible.似乎这是不可能的。 There has been a bug preventing it in Chrome since 2012!自 2012 年以来,Chrome 中一直存在一个阻止它的错误!https://bugs.chromium.org/p/chromium/issues/detail?id=150835https://bugs.chromium.org/p/chromium/issues/detail?id=150835
If it happens to use html2canvas this can be done like that:如果碰巧使用 html2canvas,可以这样做:
This converts something with html2canvas to a canvas and then produce the image of it and then saves it to clipboard as png.这会将带有 html2canvas 的内容转换为画布,然后生成它的图像,然后将其作为 png 保存到剪贴板。 For example,例如,
HTML: HTML:
<div id="copyToImage">Hello World!</div>
JavaScript: JavaScript:
$("#copyToImage").click(function() {
html2canvas(document.querySelector("#copyToImage")).then(canvas => canvas.toBlob(blob => navigator.clipboard.write([new ClipboardItem({'image/png': blob})])));
});
You can convert images to string using this:您可以使用以下方法将图像转换为字符串:
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;
}
and for copying to clipboard try a solution on this page .并复制到剪贴板尝试此页面上的解决方案。
//copy image to ClipBoard Using Java Robot //使用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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.