javascript - html 图像 blob 到 base64

标签 javascript image base64 blob

我有一些关于 fileinputjs 的问题。图像的 src 是 blob。但是我想使用图像的 src 来做一些事情。所以我使用 readAsDataURL 来获取 base64。但是它有任何问题。

<script type="text/javascript">
     $("#last").click(function(){
       var blob=document.querySelector(".file-preview-image").src;
       var reader = new FileReader(); //通过 FileReader 读取blob类型
   reader.onload = function(){
    this.result === dataURI; //base64编码
    }
    console.log(reader.readAsDataURL(blob));
})
     </script>

然后是Uncaught TypeError: Failed to execute 'readAsDataURL' on 'FileReader': parameter 1 is not of type 'Blob'

最佳答案

这里有很多误解。

  • 你的变量blob不是 Blob , 而是一个字符串,.file-preview-image 的 url .
    FileReader 无法对此字符串执行任何操作。 (或者至少不是你想要的)。
  • onload FileReader 的回调,您只是在检查结果是否等于 undefined variable dataURI .那不会做任何事情。
  • 您正在尝试 console.log调用readAsDataURL这将是 undefined因为此方法是异步的(您必须在回调中调用 console.log)。

但是因为我猜你拥有的是一个 object url ( blob:// ),那么您的解决方案是获取真正的 Blob 对象并将其传递给 FileReader , 或者在 Canvas 上绘制此图像,然后调用其 toDataURL 获取 base64 编码版本的方法。

如果你能得到 blob :

var dataURI;

var reader = new FileReader();

reader.onload = function(){
  // here you'll call what to do with the base64 string result
  dataURI = this.result;
  console.log(dataURI);
  };

reader.readAsDataURL(blob);

否则:

var dataURI;

var img = document.querySelector(".file-preview-image");

var canvas = document.createElement('canvas');
canvas.width = img.width;
canvas.height = img.height;
canvas.getContext('2d').drawImage(img, 0,0);
dataURI = canvas.toDataURL();

但请注意,对于后者,您必须等待图像实际加载后才能在 Canvas 上绘制它。
此外,默认情况下,它会将您的图像转换为 png 版本。你也可以通过 image/jpeg作为 toDataURL('image/jpeg') 的第一个参数如果原始图像是 JPEG 格式。
如果图像是 svg,那么会有使用 <object> 的其他解决方案。元素,但除非你真的需要它,否则我会把它留给其他答案。

关于javascript - html 图像 blob 到 base64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37130010/

相关文章:

javascript - RRD原始数据转JSON

javascript - 如果不是 IE 显示警报 - HTML/JS

android - 捕获的图像未显示在图库中,但已成功存储在 SD 卡中

Javascript变量范围和引用

javascript - 如何使用 Tablesorter lib 创建自定义过滤器来搜索全表?

android - ListView 数据图像在快速向下滚动时重复

java - 在使用 php 和 android 上传到服务器之前调整图像大小

javascript - 在 JavaScript 中将 Base64 类型转换为字符串

html - 使用base64将 Canvas 图像从一个 Canvas 显示到另一个 Canvas

image - 我可以将图像作为文件而不是数据存储在 Firebase 上吗 :url?