我想以编程方式复制图像。我使用了无法正常工作的executeCommand('copy')
,因此我用document.addEventListener('copy', modifyCopy);
覆盖了复制侦听器。工作,但是在Mozilla中,当我设置数据后在设置数据时会启用油漆粘贴,但会出现以下错误。
您可以检查小提琴以了解我的尝试。 http://jsfiddle.net/32mbd1o0/16/
e.clipboardData.setData('image/png',blobUrl);
答案 0 :(得分:3)
Firefox仅在复制和剪切事件Source期间支持这些数据类型。
一种可能的解决方法described here,将图像作为html数据复制到剪贴板。这有效,但仅当您要粘贴在诸如Microsoft Windows Word或其他文字处理器之类的程序上时。用于处理图形(绘画,photoshop等)的程序无法理解剪贴板上的内容。
最后,您还可以创建依赖于API clipboard.setImageData()的firefox扩展。 Clipboard.setImageData允许您使用图像数据填充剪贴板。该API与Chrome应用程序API(在Firefox 57中添加)兼容,仍应视为实验性的。该API需要剪贴板写入权限。
答案 1 :(得分:0)
非常抱歉,但是JavaScript
语言无法做到您想要的那样,请参见C#
中的以下代码:
// Copy the selected area to the clipboard.
private void CopyToClipboard(Rectangle src_rect)
{
// Make a bitmap for the selected area's image.
Bitmap bm = new Bitmap(src_rect.Width, src_rect.Height);
// Copy the selected area into the bitmap.
using (Graphics gr = Graphics.FromImage(bm))
{
Rectangle dest_rect =
new Rectangle(0, 0, src_rect.Width, src_rect.Height);
gr.DrawImage(OriginalImage, dest_rect, src_rect, GraphicsUnit.Pixel);
}
// Copy the selection image to the clipboard.
Clipboard.SetImage(bm);
}
一些功能和API并未在JavaScript
中退出,但是由于某些安全和政策原因,例如Clipboard.SetImage
,此代码中带有Bitmap
函数的图像已创建并放在剪贴板中,然后诸如Paint,Microsoft Office,Adobe生产的应用程序就可以找到它,但是使用JavaScript
则没有API或函数可以执行上述代码。
我花了大约一个小时的时间回答您的问题,我有一个主意,我想将图像更改为base64
,然后在剪贴板中复制,但这不是一个好主意,因为它是纯文本和其他应用程序只能看到文本,我知道这很糟糕,但是确实如此。
有时候,我使用Windows 10 snipping tool
和Linux shutter
截取了部分桌面,并通过Telegram将其发送给了我的朋友,我看到了一个简单的 Ctrl < / kbd> + V 我可以将裁剪后的部分粘贴到聊天区域中,然后将裁剪后的部分自动复制到剪贴板中,我进行了搜索,但不像现在这样,我对其进行了深入搜索并找到了它出,就无法将剪贴板中的图像复制到浏览器区域的外部。
有一种方法只能复制浏览器,将图像转换为base64
并将其保存在剪贴板中,然后仅在浏览器中将其作为img
标记,并将base64
文本设置为src
标签的img
属性。就是这样。
对不起,不好消息。