如何使用html2canvas上传屏幕截图?

2024-01-02

Using html2canvas http://html2canvas.hertzen.com/如何将屏幕截图保存到对象?我一直在探索演示,发现生成屏幕截图的函数生成如下:

$(window).ready(function() {
  ('body').html2canvas();       
});

我尝试做的是

$(window).ready(function() {
  canvasRecord = $('body').html2canvas(); 
  dataURL = canvasRecord.toDataURL("image/png");
  dataURL = dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
  upload(dataURL);

});

然后,我将它传递给我的upload()功能。我遇到的问题是我无法弄清楚屏幕截图是在哪里制作的html2canvas()库或什么函数返回它。我尝试使用转换画布对象this https://stackoverflow.com/a/934925/258755SO的回答(虽然我不确定我需要这样做)。


我刚刚问了一个question https://stackoverflow.com/questions/9249659/uploading-a-png-to-imgur-using-javascript关于如何将文件上传到imgur http://imgur.com/,那里的答案(特别是@bebraw的)帮助我理解我需要做什么。

The upload()函数来自 Imgur 示例 api 帮助:

function upload(file) {
   // file is from a <input> tag or from Drag'n Drop
   // Is the file an image?
   if (!file || !file.type.match(/image.*/)) return;

   // It is!
   // Let's build a FormData object
   var fd = new FormData();
   fd.append("image", file); // Append the file
   fd.append("key", "mykey"); // Get your own key: http://api.imgur.com/

   // Create the XHR (Cross-Domain XHR FTW!!!)
   var xhr = new XMLHttpRequest();
   xhr.open("POST", "http://api.imgur.com/2/upload.json"); // Boooom!
   xhr.onload = function() {
      // Big win!
      // The URL of the image is:
      JSON.parse(xhr.responseText).upload.links.imgur_page;
   }

   // Ok, I don't handle the errors. An exercice for the reader.
   // And now, we send the formdata
   xhr.send(fd);
}

我已经修改并注释了该方法这个答案 https://stackoverflow.com/a/5303242/938089?sending-images-from-canvas-elements-using-ajax-and-php-files。它只发送一个具有给定名称的文件,该文件由<canvas>元素。

if (!('sendAsBinary' in XMLHttpRequest.prototype)) {
  XMLHttpRequest.prototype.sendAsBinary = function(string) {
    var bytes = Array.prototype.map.call(string, function(c) {
      return c.charCodeAt(0) & 0xff;
    });
    this.send(new Uint8Array(bytes).buffer);
  };
}

/*
 * @description        Uploads a file via multipart/form-data, via a Canvas elt
 * @param url  String: Url to post the data
 * @param name String: name of form element
 * @param fn   String: Name of file
 * @param canvas HTMLCanvasElement: The canvas element.
 * @param type String: Content-Type, eg image/png
 ***/
function postCanvasToURL(url, name, fn, canvas, type) {
  var data = canvas.toDataURL(type);
  data = data.replace('data:' + type + ';base64,', '');

  var xhr = new XMLHttpRequest();
  xhr.open('POST', url, true);
  var boundary = 'ohaiimaboundary';
  xhr.setRequestHeader(
    'Content-Type', 'multipart/form-data; boundary=' + boundary);
  xhr.sendAsBinary([
    '--' + boundary,
    'Content-Disposition: form-data; name="' + name + '"; filename="' + fn + '"',
    'Content-Type: ' + type,
    '',
    atob(data),
    '--' + boundary + '--'
  ].join('\r\n'));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用html2canvas上传屏幕截图? 的相关文章

随机推荐

  • 无法使用 log4j DailyRollingFileAppender 将日期附加到文件名

    您好 我正在尝试使用 log4j DailyRollingFileAppender 将当前日期附加到文件名 但它不起作用 我使用了如下配置 请为此建议一个解决方案 特性 log4j rootLogger DEBUG rollingAppen
  • Node.js 进程如何知道何时停止?

    由于许多 Node js 脚本遵循异步执行某些操作的模式 下面的示例 它们如何知道何时停止 在下面的代码中 节点在处理 writeFile 并适当注册回调后如何确定该进程应保持活动状态直到回调运行 fs require fs fs writ
  • Linq to Entities 简单组查询

    如何编写 简单 LINQ to Entities 查询 按某些属性对元素进行分组并对它们进行计数 SELECT answernumber count answerID FROM answers WHERE questionID id GRO
  • Android相对布局alignCenter从另一个视图

    我有一个RelativeLayout有两个孩子 他们也是RelativeLayout包含一些按钮和东西 这些子布局不在我的主布局的中心 并且主布局确实包含这两个布局之外的一些其他内容 我希望第一个位于第二个之上 这很简单 只需使用andro
  • 将转义的 XML 实体转换回 UTF-8

    所以我在 XML 文件中得到了这个 UTF 8 字符串 Horrible place 当我将其提供给外部应用程序时 有趣的字符会转义为 XML 实体 Horrible place x2620 x2620 x2620 在 Ruby 中 如何将
  • 用于 JavaScript 逗号分隔数字验证的正则表达式

    我有一个文本框 它可以具有如下值1 or 1 2 or 1 225 345 21 即多个值 但现在我想验证这个输入 toString match 0 9 这是我正在使用的代码 它仅验证正确性 但是当用户输入如下值时会出现一个问题 input
  • 迭代 Queue 是否保证按队列顺序?

    这是否保证始终打印123 Queue
  • 我可以在没有 Visual Studio 的情况下下载 Visual C++ 命令行编译器吗?

    正如标题所示 我不想下载整个 Visual C 安装程序 只想下载 cl exe 以及在 Windows 上编译和链接 C 程序所需的其他程序 如前所述 没有办法做到这一点 您需要下载整个 4 6GB 捆绑包 MS 的部署是个糟糕的事情 然
  • lxml增量XML序列化重复命名空间

    我目前正在使用 lxml 在 Python 中序列化一些较大的 XML 文件 我想为此使用增量编写器 我的 XML 格式严重依赖命名空间和属性 当我运行以下代码时 from io import BytesIO from lxml impor
  • (Windows Git-bash) IntelliJ git bash shell 配色方案与 Docker 搞混了

    Windows Git bash 当我在 IntelliJ 项目中使用 git bash 作为终端时 当我登录到 docker 容器并使用时遇到问题ls 文本突出显示为浅蓝色 并且颜色不会消失 直到我退出 有想过如何纠正这个问题吗 我怀疑这
  • 如何避免 Apache Pulsar 中自动删除不活动主题

    我有一个应用程序 可以在特定主题下向 Pulsar 生成消息 并在完成后关闭该应用程序 同时 不存在任何消费者来阅读该主题 过了一段时间 当我创建一个消费者并想要读取写入的数据时 我发现所有数据都丢失了 因为我编写的主题被 Pulsar 删
  • 将土耳其字母替换为英文字母

    我想用英文字母替换句子中的每个土耳其语字母 我尝试以下功能 title result T rkiye nin en iyi oranlari ile Lider Bahis Sitesi turkish array turkish lett
  • 使 PHP 5.3 中的匿名函数与 PHP 5.2 一起使用

    我有一个匿名函数 现在需要更新它才能与 PHP 5 2 兼容 该函数 如下 接受文本并将每个句子的第一个字母大写 function clean text input output input output preg replace call
  • 本机离子网络状态不适用于我的代码

    我想在所有页面上没有连接和 或连接时显示警报消息 但它不起作用 显示网络类型有效 但没有显示任何警报消息 目标是当APP连接和断开时显示消息 我正在跟进https ionicframework com docs native network
  • d3.json 调用总是获取空数据

    如果我从浏览器向服务器发出此调用 http localhost 8080 api items number all json 或者来自卷曲 curl G http localhost 8080 api items number all js
  • 两条道路交叉口的地理编码

    有谁有一种方法 API 或格式可以输入到 google 地图 API 或任何其他 API 中 以便我可以可靠地获取交叉路口的纬度和经度 例如 如果我输入 13th and Walnut Philadelphia PA 或 13th st a
  • Msi 安装程序从命令提示符传递参数以设置服务登录

    安装程序构建工具 Microsoft Visual Studio 2010 项目安装程序 I am trying to pass username and password for the installer to use for runn
  • 如何在警报对话框中膨胀包含列表视图的布局?

    我在布局中使用带有自定义适配器的列表视图 现在我试图将包含列表的布局带到我的警报对话框中 我尝试使用此代码将不包含列表的简单布局引入警报对话框 并且效果良好 但我无法将包含布局的列表带入警报对话框 AlertDialog Builder d
  • 如何对 Delphi/C++Builder 中的设计时包进行故障排除?

    多年来 我在 Delphi C Builder 的每个版本中一直遇到 IDE 问题 我通常只是重新启动 重新编译等然后继续 然而 我不断看到其他人说 IDE 坚如磐石 我读到很多人说大多数 IDE 问题都是自定义组件问题造成的 我们有几个自
  • 如何使用html2canvas上传屏幕截图?

    Using html2canvas http html2canvas hertzen com 如何将屏幕截图保存到对象 我一直在探索演示 发现生成屏幕截图的函数生成如下 window ready function body html2can