【问题标题】:Can I take a screenshot from the clipboard?我可以从剪贴板截取屏幕截图吗?
【发布时间】:2019-04-07 13:17:22
【问题描述】:

我可以从剪贴板截取屏幕截图,将其发送到 ajax 并放入 <img> 标签中吗?

例如,

我有这个表格:

<form>
  <div id="img"><img src="need put screen here!"></div>
  <textarea></textarea>
  <button type="submit">Answer!</button>
</form>

我需要它!人们要求从剪贴板中截取屏幕截图。

如果屏幕停留在代码 base64 中的剪贴板中,我将其制作成 PHP 中的图片。

我只是不知道,如何从剪贴板截取屏幕截图并将其发送到 ajax。

【问题讨论】:

  • 问题不清楚,你有base64并想上传到服务器还是需要创建一个并上传?
  • 我不明白你想用剪贴板做什么,如果你想明显地捕捉整个屏幕的图像(可以通过使用navigator.mediaDevices.getDesktopMedia()获得)?无论如何,您捕获的内容并不重要,因为两者都可以通过 HTTP 发送到某个地方(您称之为“发送到 AJAX”)。如果您有答案,请将其标记为这样。如果不是,请注意您的问题被认为不清楚,您可能需要通过编辑来澄清。另外,欢迎来到 Stack Overflow,对不起,你遇到了一个学究(我):)

标签: javascript jquery ajax


【解决方案1】:

是的,您可以:

  1. 在剪贴板中捕获粘贴到您网页中的数据
  2. 通过 HTTP 将所述数据上传到某处
  3. 在您的网页中将所述数据显示为图像

要在剪贴板中获取数据,您需要为“粘贴”事件类型附加一个事件侦听器。该事件在活动文档元素上触发,并在元素层次结构中一直向上到文档窗口。

您的事件侦听器传递的ClipboardEvent 对象将让您获取剪贴板中的实际数据、文本和/或图像:

addEventListener("paste", ev => {
    for(const item of ev.clipboardData.items) { /// Clipboard may contain multiple elements of different type -- text, image, etc
        if(item.type.startsWith("image/")) { /// We are only interested in clipboard data that is an image
            /// Do something with the data, image available as `item.getAsFile()`
        }
    }
});

图像数据可用于item.getAsFile()FileBlob 的子类)。您可以简单地上传 blob:

var xhr = new XMLHttpRequest();
xhr.open("PUT", "http://example.com");
xhr.send(item.getAsFile()); /// Send the image with HTTP somewhere

您还可以显示粘贴的图像,假设您的文档中某处有&lt;img id="foobar"&gt;

document.getElementById("foobar").src = URL.createObjectURL(item.getAsFile());

【讨论】:

    【解决方案2】:

    您可以使用html2canvas 截取屏幕截图并上传,全部使用 JavaScript。

    使用以下方法截取当前屏幕:

    html2canvas(document.body).then(function(canvas) {
    
    });
    

    然后使用canvas.toDataURL();将图片转成base64并上传。

    【讨论】:

    • 是的,它有效,但我认为使用 textarea 或 anithing 也可以,在任何文本编辑器中如何。但我现在认为它在 JS 中是不可能的
    • canvas.toDataURL();你可以分配textarea中生成的base64值并在提交时推送到服务器。
    • 令人难以置信,它的工作,谢谢!但它仅在使用此脚本的页面上工作。如果我从桌面或任何地方拍照,它就不起作用((我使用
    • 是的,这仅适用于浏览器窗口。如果你想从桌面截图上传图片,你可以检查这个https://stackoverflow.com/questions/490908/paste-an-image-from-clipboard-using-javascript
    猜你喜欢
    • 2011-11-05
    • 2014-04-13
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    相关资源
    最近更新 更多