H5 图片预览的两种实现

1、原理浅析

  • FileReader,利用FileReader实例的readAsDataURL方法可以将input上传的图片转成base64形式的url,将其给到img的src属性即可
  • window.URL.createObjectURL,该API可将input上传的图片转成blob形式的url,将其给到img的src熟悉即可
    看下二者的兼容性:


    FileReader兼容性.png

    URL兼容性.png

    可以看到FileReader的兼容性是优于URL的

2、具体实现

Talk is easy,show you the Code!

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>图片预览两种实现</title>
</head>
<body>
    <input type="file" id="file" multiple>
    <div class="show-img"></div>
    <script>
        
    document.getElementById('file').onchange = function(e){          
        var ele =  document.getElementById('file').files[0];
        //方式1:FileReader
        var fr = new FileReader();
        fr.onload = function(ele){
            var img = new Image();
            img.src = ele.target.result;
            document.querySelector('.show-img').appendChild(img);
            // 得到的img是这样的<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA..."/>
        }
        fr.readAsDataURL(ele);

        //方式2:URL.createObjectURL(blob)
        // var createObjectURL = function(blob){
        //   return window[window.webkitURL ? 'webkitURL' : 'URL']['createObjectURL'](blob);
        // };
        // var imgdata = createObjectURL(ele);

        // var img = new Image();
        // img.src = imgdata;
        // // 得到的img是这样的<img src="blob:null/21183794-c843-403d-a3b5-e1a35f30587c">

        // document.querySelector('.show-image').appendChild(img);
    }
    </script>
</body>
</html>

3、需要注意的地方

  • 对于FileReader,可能某些android机型不能上传图片(oppo 安卓4.3?未实践,看别人博客说有这个问题),解决方案:http://www.tuicool.com/articles/buu6ji
  • 据说creatObjectURL可以有更好的性能,处理速度更快,待实践
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容