当前位置: 首页 > 知识库问答 >
问题:

如何从Blob或BlobURL获取数据URL

关胜
2023-03-14

我需要拍摄一个div的屏幕截图,并需要将其发送到服务器(Java)进行存储。我公司项目中的现有代码使用Html2Canvas。js获取元素的位置(div,body…)返回base64数据URI,它工作正常,但在Chrome中冻结了应用程序。因此,我正在寻找其他解决方案,并从堆栈溢出中找到以下代码。

var data = '<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200">' +
           '<foreignObject width="100%" height="100%">' +
           '<div xmlns="http://www.w3.org/1999/xhtml" style="height:200px;width:200px;background-color:red;font-size:40px">' +
             '<em></em> l ' + 
             '<span style="color:white; text-shadow:0 0 2px blue;">' +
             '</span>' +
           '</div>' +
           '</foreignObject>' +
           '</svg>';

var DOMURL = window.URL || window.webkitURL || window;
var svg = new Blob([data], {type: 'image/svg+xml;charset=utf-8'});
var url = DOMURL.createObjectURL(svg);
document.getElementById("image1").src=url;
<img id='image1' width="200px" height="200px"/>

在这里,我得到的网址是Blob-Url(blob:https://fiddle.jshell.net/a5b366a2-ff0c-4c7b-9b20-a80395d7f536),我可以用作img src,或者如果我直接在新标签中打开该网址,它也会打开。有没有从Blob URL或Blob对象中获取像这样的bas64 dataUri(data: Image/png; bas64, R0lGODlhEAAQAMQAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7///wAAAAA)?

共有2个答案

江亮
2023-03-14

您可以使用FileReader并按如下方式执行:

var data = '<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200">' +
           '<foreignObject width="100%" height="100%">' +
           '<div xmlns="http://www.w3.org/1999/xhtml" style="height:200px;width:200px;background-color:red;font-size:40px">' +
             '<em></em> l ' + 
             '<span style="color:white; text-shadow:0 0 2px blue;">' +
             '</span>' +
           '</div>' +
           '</foreignObject>' +
           '</svg>';

var DOMURL = window.URL || window.webkitURL || window;
var svg = new Blob([data], {type: 'image/svg+xml;charset=utf-8'});
var url = DOMURL.createObjectURL(svg);

var base64data;

var reader = new window.FileReader();
 reader.readAsDataURL(svg); 
 reader.onloadend = function() {
   base64data = reader.result; 
   document.getElementById("image1").src=base64data;
 }
html lang-html prettyprint-override"><img id='image1' width="200px" height="200px"/>
宣高朗
2023-03-14

@关于如何从Blob获取数据URI,该IO是正确的:使用FileReader及其readAsDataURL()方法
这将为Blob/文件提供base64编码的dataURI表示。

但是,让我们从你正在做的事情中退一步:
你正在使用HAKE获取某种HTML标记的屏幕截图,使用SVG的OutGeNobIbjts。

您绝对不需要Blob,也不需要base64版本在

var svgString = '<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200">' +
  '<foreignObject width="100%" height="100%">' +
  '<div xmlns="http://www.w3.org/1999/xhtml" style="height:200px;width:200px;background-color:red;font-size:40px">' +
  '<em></em> l ' +
  '<span style="color:white; text-shadow:0 0 2px blue;">' +
  'I\'m white'+
  '</span>' +
  '</div>' +
  '</foreignObject>' +
  '</svg>';

var dataURI = 'data:image/svg+xml; charset=utf8, ' + encodeURIComponent(svgString);

img.src = dataURI;
<img id="img" />

 类似资料:
  • 问题内容: 我允许用户通过拖放和其他方法将图像加载到页面中。放置图像时,我用来转换为对象URL以显示图像。我没有撤消该URL,因为我确实重复使用了它。 因此,当需要创建一个对象时,我可以允许他们上传其中包含其中一个图像的表单,是否可以通过某种方式将该对象URL反向转换为a ,然后可以将其附加到a 宾语? 问题答案: 正如gengkev在上面的评论中所暗示的那样,似乎最好/唯一的方法是使用异步xhr

  • 我允许用户通过拖动将图像加载到页面中 那么,当需要创建一个对象时,我可以允许他们上传一个包含其中一个图像的表单,有没有什么方法可以将该对象URL反转回或,然后将其附加到对象?

  • 问题内容: 基本上,我在这里尝试做的是检索图像并将其转换为base64。 通过阅读此处的评论,它指出: “当然。在将资源作为ArrayBuffer提取后,从中创建一个blob。一旦有了它,就可以直接对base / blob 或进行base64编码 。” 但是,只是,而我需要从图像中获取二进制文件,以便可以将其转换为base64并使用数据将其显示在img标签中。 有人知道如何实现这一目标吗? 先感谢

  • 我想获取日期字段,但下面的代码没有这样做。Toast显示null(字符串日期的值)。 公共字符串日期;

  • 问题内容: 我正在尝试2天,以找到一种从数据库中检索一些图像的方法。它们被保存为二进制字符串(我在某个地方读过该术语,但坦率地说从未听说过)。 大多数图像都是格式化的,很容易获取并保存到文件中。但是我的问题是图像。由于某种原因,我当时无法显示。 现在,我正在使用一个简单的代码来获取图像并将其保存到文件中: 在和中都能正常工作,但是在尝试显示时格式不可读。 我已经发现但尚未解决的问题: http:/

  • 问题内容: 我正在基于CodeIgniter的应用程序。这里的代码: 控制器 : 型号 : 查看 : Javascript : 上面的代码运行良好。 现在,我想通过ajax请求将数据提取到。我已经从url创建了一个ajax请求,可以从这里,where 和进行说。 Ajax响应产生: 问题 如何使用Ajax数据源配置数据表,以及如何将数据显示到表中,所以我可以使用数据例如创建类似代码的链接 问题答案