Javascript 将图像复制到剪贴板

Javascript 将图像复制到剪贴板,javascript,jquery,clipboard,Javascript,Jquery,Clipboard,看起来,你还不能通过编程将一个图像从JavaScript web应用复制到剪贴板 我试着在剪贴板上复制一个文本,结果成功了 现在我想复制一个图像,然后按ctrl+v将其粘贴到Word、Excel或Paint中 $(function() { $("#btnSave").click(function() { html2canvas($("#container1"), { onrendered: function(canvas) {

看起来,你还不能通过编程将一个图像从JavaScript web应用复制到剪贴板

我试着在剪贴板上复制一个文本,结果成功了

现在我想复制一个图像,然后按ctrl+v将其粘贴到Word、Excel或Paint中

$(function() { 
    $("#btnSave").click(function() { 
        html2canvas($("#container1"), {
            onrendered: function(canvas) {
                theCanvas = canvas;

                document.body.appendChild(canvas);
                Canvas2Image.saveAsPNG(canvas); 
                $("#img-out").append(canvas);
            }
        });
    });
}); 

出于安全原因,您不能使用Javascript复制到剪贴板,可以在这里的讨论中找到解决方法。涉及flash。

查看此JavaScript复制和粘贴指南:


根据这一点,Chrome、Safari和Firefox都支持将图像与纯文本一起复制,而IE只允许复制文本。上面链接的页面描述了此服务如何使用扩展将此功能添加到上下文菜单,但似乎有几种浏览器支持以编程方式复制图像。

你说得对。chrome还不支持将图像数据复制到剪贴板中。 看起来它已经开放了大约4年了

不过有一个剪贴板API规范即将发布

这适用于所有浏览器(截至2016年)。我也在GitHub上上传了:

//跨浏览器功能选择内容
函数SelectText(元素){
var doc=单据;
if(doc.body.createTextRange){
var range=document.body.createTextRange();
range.moveToElementText(元素);
range.select();
}else if(window.getSelection){
var selection=window.getSelection();
var range=document.createRange();
范围。选择节点内容(元素);
selection.removeAllRanges();
选择。添加范围(范围);
}
}
$(“.copyable”)。单击(函数(e){
//使容器Div内容可编辑
$(this.attr(“contenteditable”,true);
//选择图像
选择文本($(this.get(0));
//执行复制命令
//注意:这仅在单击列表器中直接起作用
document.execCommand('copy');
//取消选择内容
getSelection().removeAllRanges();
//使容器Div再次不可编辑
$(此).removeAttr(“内容可编辑”);
//成功!!
警报(“图像已复制!”);
});

好吧,这是我在这里的第一篇帖子,我想答案是:)

实际上,我目前正在使用我的项目中的cefsharp web浏览器组件,cefsharp运行在基于chrome的浏览器上,我想复制网页中的img元素

使用cefsharp,您可以操作仅浏览器的javascript,因此我认为我们可以使用canvas元素来处理它

/*
'由于lorempixel超时,我使用了img onload函数。
*/
函数copyImage(){
var imgCap=document.getElementById('imgCap');
var imgCanvas=document.createElement('canvas');
imgCanvas.id='imgCanvas';
imgCanvas.height=40;
imgCanvas.width=120;
文件.正文.附件(imgCanvas);
var originalContext=imgCanvas.getContext('2d');
原始上下文drawImage(imgCap,0,0);
//返回imgCanvas.toDataURL();
}
//document.onload=copyImage()

对于那些仍在观看的人,ClipboardAPI现在可以处理png图像

try {
    navigator.clipboard.write([
        new ClipboardItem({
            'image/png': pngImageBlob
        })
    ]);
} catch (error) {
    console.error(error);
}

因此,我创建了一个完美的解决方案,使用1行程序,类似于将带有html2canvas的内容转换为画布,然后生成其图像,然后将其保存到剪贴板作为png。比如说,

HTML:
你好,世界

JavaScript:

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

chrome还不支持将图像数据复制到剪贴板中。看起来它已经开放了大约4年了。Lucid Chart link对我不起作用,但我在这里找到了这篇文章:它没有将
DataTransferItem
文件添加到
ClipboardEvent
中,但是从web浏览器图像上下文菜单中纯“复制图像”就可以了。基本上,这段代码将图像作为HTML内容传递,而不是纯图像。在Firefox 56、Chrome 61和Opera 48中不起作用。您使用的是哪种浏览器?但值得注意的是,正如切尔尼所说,这有其局限性。。有些应用程序可以理解复制的img html,而其他应用程序则不能。在Firefox Quantum或Chrome(2018)中都不起作用。这已经过时,不再起作用,这是codepen中的精确副本-我尝试了上面提到的JavaScript代码,但它不起作用。@Omar,你得到了什么?它在代码片段中工作。我正在普通的独立Chrome浏览器中尝试代码(而不是在使用CefSharp的.NET应用程序中)。。您的代码似乎只用于在.NET应用程序中与CefSharp一起工作。我正在寻找一种在正常日常使用的浏览器(Chrome、Firefox等)中工作的方法。以下可能是一个相对可靠/可移植(尽管增加了交互成本)的解决方案:创建一个包含canvas.toDataURL()内容的新选项卡。
。然后用户可以右键单击该图标并将图像“复制”到剪贴板。仅适用于安全的https连接。还看到我得到的错误“剪贴簿项目”没有定义!我可以从某个地方导入它吗?Firefox不支持它