Javascript chrome/ff中带有createObjectURL的对象URL的数据URI

Javascript chrome/ff中带有createObjectURL的对象URL的数据URI,javascript,html,Javascript,Html,我有一个图像的base64字符串。如何将其转换为对象URL?其目的是通过向DOM注入BLOBURL而不是非常大的base64字符串,尝试看看我的svg编辑器是否会更快。这仅用于编辑SVG。保存时,对象URL将再次转换为base64 图像大小通常为0.5 MB或更大 我所尝试的: var img = ...; //svg <image> var bb = new BlobBuilder(); var dataStr = img.getAttributeNS(XLINKNS, 'href

我有一个图像的base64字符串。如何将其转换为对象URL?其目的是通过向DOM注入BLOBURL而不是非常大的base64字符串,尝试看看我的svg编辑器是否会更快。这仅用于编辑SVG。保存时,对象URL将再次转换为base64

图像大小通常为0.5 MB或更大

我所尝试的:

var img = ...; //svg <image>
var bb = new BlobBuilder();
var dataStr = img.getAttributeNS(XLINKNS, 'href'); //data:image/jpeg;base64,xxxxxx
//dataStr = dataStr.replace(/data:.+;base64,/i, ''); //Strip data: prefix - tried both with & without
//dataStr = window.atob(dataStr); //tried both with & without

bb.append(dataStr);
var blob = bb.getBlob
img.setAttributeNS(XLINKNS, 'xlink:href', window.URL.createObjectURL(blob)); //blob:xxx
var-img=//svg
var bb=新的BlobBuilder();
var dataStr=img.getAttributeNS(XLINKNS,'href')//数据:图像/jpeg;base64,xxxxxx
//dataStr=dataStr.replace(/data:.+;base64,/i,)//条带数据:前缀-带和不带尝试
//dataStr=window.atob(dataStr)//有无都试过
bb.append(dataStr);
var blob=bb.getBlob
setAttributeNS(XLINKNS,'xlink:href',window.URL.createObjectURL(blob))//blob:xxx
取而代之的是一幅看似损坏的jpeg图像


TIA.

如果您想在iframe中显示html,会发生什么

iframe.src = "data:text/html,"+encodeURIComponent( window.btoa(text) );
试试这个代码

function dataURItoBlob(dataURI) {
  var mime = dataURI.split(',')[0].split(':')[1].split(';')[0];
  var binary = atob(dataURI.split(',')[1]);
  var array = [];
  for (var i = 0; i < binary.length; i++) {
     array.push(binary.charCodeAt(i));
  }
  return new Blob([new Uint8Array(array)], {type: mime});
}

如果有人想将数据URI保存为服务器中的映像:

通过post请求将数据URI传递给服务器:

var imgData = canvas.toDataURL('image/png');
$.post("https://path-to-your-script/capture.php", {image: imgData},
    function(data) {
        console.log('posted');
});
保存图像:capture.php


只是好奇你是否能从中获得更好的表现?当我有太多的数据URL时,我也会遇到问题,我想知道将它们作为对象URL保存是否会更好
var imgData = canvas.toDataURL('image/png');
$.post("https://path-to-your-script/capture.php", {image: imgData},
    function(data) {
        console.log('posted');
});
$data = $_POST['image'];

// remove "data:image/png;base64," from image data.
$data = str_replace("data:image/png;base64,", "", $data);

// save to file
file_put_contents("/tmp/image.png", base64_decode($data));