Ответ 1
Кажется, это невозможно. Ошибка с Chrome в 2012 году с Chrome! https://bugs.chromium.org/p/chromium/issues/detail?id=150835
У меня есть изображение как строка DataURL.
И я хочу программно скопировать это изображение в ClipBoard.
Я нашел две функции, но ни одна из них не работает. Хотя, первая функция работает хорошо, когда вы копируете текст - копировать ( "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');
}
Кажется, это невозможно. Ошибка с Chrome в 2012 году с Chrome! https://bugs.chromium.org/p/chromium/issues/detail?id=150835
Вы можете преобразовать изображения в строку, используя это:
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;
}
и для копирования в буфер обмена попытайтесь найти решение на этой странице.
Сегодня, 7 лет спустя, это самая звездная проблема в Google Chrome. Для копирования изображений используется JavaScript. И теперь это возможно!
Chrome 76 Beta поддерживает это: https://blog.chromium.org/2019/06/chrome-76-beta-dark-mode-payments-new.html
Вы можете прочитать полный проект здесь: https://www.chromestatus.com/feature/5074658793619456
и здесь: https://w3c.github.io/clipboard-apis/#async-clipboard-api
Пример:
var data = new Blob(["iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+P+/HgAFhAJ/wlseKgAAAABJRU5ErkJggg=="], {type : "image/png"});
const clipboardItemInput = new ClipboardItem({'image/png' : blobInput});
await navigator.clipboard.write([clipboardItemInput]);
Вы можете проверить это здесь: http://w3c-test.org/clipboard-apis/async-write-image-read-image-manual.https.html
(Теперь поддерживается только Chrome 76 beta)
//копировать изображение в ClipBoard с помощью 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);