欢迎访问我的个人博客:http://www.xiaolongwu.cn

前言

最近在项目上加一个图片裁剪上传的功能,用的是cropper插件,注意到选择本地图片后就会有预览效果,这里整理一下这种预览效果的实现原理;

实现原理

通过input的 type = file属性和js的内置FileReader对象,利用FileReader对象的readAsDataURL方法,把图片数据转成base64字符串数据,然后把这个base64字符串数据赋值给一个图片标签的src。

伪代码

//input标签,获取本地图片
<input type="file" onchange="uploadImg(this)" accept="image/*"/> //预览图片标签
<img id="viewImg"/> function uploadImg(fileDom) {
//取到file文件的本地路径,就是你电脑上的存储路径
console.log(fileDom.value); // 获取图片数据
var file = fileDom.files[0]; // 获取图片名字
console.log(file.name); // 获取图片文件大小,单位为byte
console.log(file.size); var reader = new FileReader();
reader.readAsDataURL(file); //确保文件成功获取,base64数据量比较大
reader.onload = function (e) {
var img = document.getElementById("viewImg");
img.src = e.target.result;
//或者 img.src = this.result; 因为e.target == this
}
}

知识延伸

FileReader除了readAsDataURL方法之外,还有另外两个比较重要的方法,分别为readAsBinaryString 将选择的文件读取成二进制和readAsText将选择的文件读取成文本格式 ;

我的github资源地址:https://github.com/js基础进阶--图片上传时实现本地预览功能的原理.md

我的个人博客地址:http://www.xiaolongwu.cn

我的博客园地址:http://www.cnblogs.com/wuxiaolong555

我的CSDN博客地址:https://blog.csdn.net/wxl1555

如果您对我的博客内容有疑惑或质疑的地方,请在下方评论区留言,或邮件给我,共同学习进步。

邮箱:wuxiaolong802@163.com

最新文章

  1. select初始化添加option,通过标签给出回显值,由于回显值和初始化值option中有一个值重复,去重等问题!
  2. 添加sudo权限
  3. Quill – 可以灵活自定义的开源的富文本编辑器
  4. jdbc 配置
  5. Linux/Unix shell 监控Oracle告警日志(monitor alter log file)
  6. U-Boot在FL2440上移植(二)----支持NOR Flash
  7. 五年.net程序员转型Java之路
  8. webMagic解析淘宝cookie 提示Invalid cookie header
  9. (三十)java多线程一
  10. 自写JQ控件-树状菜单控件[demo下载]
  11. 008_falcon磁盘io计算方法
  12. L313 珊瑚裸鼠灭绝
  13. openkm预览功能报错:flexpaper License key not accepted(no key passed to viewer)
  14. 找到多个与名为“Home”的控制器匹配的类型,如果为此请求(“{controller}/{action}/{id}”)提供服务的路由没有指定命名空间来搜索匹配此请求的
  15. [Android Studio] Android Studio如何快速生成get,set,tostring,构造函数
  16. jpa多条件查询重写Specification的toPredicate方法(转)
  17. linux perf and tracer ,java Flame Graph
  18. Rancher的安装配置
  19. WCF 自承载 提供源码
  20. (剑指Offer)面试题12:打印1到最大的n位数

热门文章

  1. Android StringEntity() 和 UrlEncodedFormEntity() 的区别
  2. AngularJS进阶(二十六)实现分页操作
  3. VS2005宏无法运行的问题(打了补丁MS14-009之后)
  4. 使用Multiplayer Networking做一个简单的多人游戏例子-3/3(Unity3D开发之二十七)
  5. Netflix公布个性化和推荐系统架构
  6. Android Studio相关资料链接
  7. 根据Facebook内存的管理使用,浅谈在iOS上自动检测内存泄漏问题
  8. obj-c利用dispatch库并发示例
  9. leetcode(57)- Implement strStr()
  10. 近期Mac上编译geany软件的总结