如何把<img>元素里面的图片的base64编码获取?

这是接着之前的问题提问
http://segmentfault.com/q/1010000000649809

现在安卓返回路径,file://这样放到img的src中的了,但是html中又怎么再获取这个img的base64呢?因为现在接口定义了是传base64的.

我查了一下网上都是利用file对象去做的 http://my.oschina.net/u/559991/blog/60310
但是现在没有这个file对象,可以怎么处理?

比如把安卓返回路径怎么处理到input file里面能获到file对象?
或者img有没有内置方法直接获取到base64?

阅读 59.8k
3 个回答

我觉得定义一个java类操作文件,用js去调用它,最直接最简单。

如果不用file:// 访问的话,倒是还可以使用CORS解决跨域、canvas的getImageData、toDataURL之类的方法读取数据。

问题: 在前端如何将image转成base64编码?

回答:

要实现这个功能,要使用canvas来做,Canvas里面提供了一个toDataURL的接口,可以用这个接口获得图片的base64

所以思路是:

  1. 获得canvas对象
  2. 加载图片到canvas对象里面
  3. 从canvas对象中获取base64数据

我给个例子

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>



<script type="text/javascript">
    function getBase64Image(img) {
      var canvas = document.createElement("canvas");
      canvas.width = img.width;
      canvas.height = img.height;

      var ctx = canvas.getContext("2d");
      ctx.drawImage(img, 0, 0, img.width, img.height);

      var dataURL = canvas.toDataURL("image/png");
      return dataURL

      // return dataURL.replace("data:image/png;base64,", "");
    }


    function main() {
      var img = document.createElement('img');
      img.src = './images/yeoman.png';
      img.onload =function() {
        var data = getBase64Image(img);
        console.log(data);
      }

      document.body.appendChild(img);
    }

    main()

  </script>



</body>
</html>

然后可以在控制台看到base64的数据

希望可以帮到你

你好 你那个问题解决了吗 我也碰到这样的问题 想问问你是怎么实现本地图片上传后怎么转换成base64编码的,求回答下! 谢谢

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题