我使用canvas.toDataURL("image/png", 0.7)
从我的画布对象创建了一个图像。它可以很好地保存上下文菜单中的图像,但它无法将图像复制到剪贴板并将其粘贴到邮件或word文档中。是否可以将“复制到剪贴板”的行为与“正常”图像的行为相同?
我正在考虑创建一个小型服务器组件,它可以获取图像的base64表示并返回一个“普通”png图像,我将能够复制到剪贴板。这可以作为一种解决方法吗?
编辑:要清除:我正在使用canvas.toDataURL("image/png", 0.7)
从画布创建图像,然后我将src
标签的img
属性设置为结果。然后,我可以在右键单击图像时从上下文菜单中选择“复制图像”。问题是我无法将图像粘贴到Word和电子邮件中(至少是Outlook)。粘贴到Wordpad和mspaint工作正常。
你可以将画布转换为img
,放入<div contenteditable>
,选择它并复制它。
var img = document.createElement('img');
img.src = canvas.toDataURL()
var div = document.createElement('div');
div.contentEditable = true;
div.appendChild(img);
document.body.appendChild(div);
// do copy
SelectText(div);
document.execCommand('Copy');
document.body.removeChild(div);
SelectText函数来自https://stackoverflow.com/a/40547470/1118626
function SelectText(element) {
var doc = document;
if (doc.body.createTextRange) {
var range = document.body.createTextRange();
range.moveToElementText(element);
range.select();
} else if (window.getSelection) {
var selection = window.getSelection();
var range = document.createRange();
range.selectNodeContents(element);
selection.removeAllRanges();
selection.addRange(range);
}
}
4年后的今天,它是谷歌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测试版)
更多信息:草案文件[包含示例]:https://docs.google.com/document/d/1lpi3-9vBP_1b7hZc2xBs0s_HaACJ6UigZZqHlJSNeJg/edit#heading=h.do75bvtsde7a