- 好啦,关于选择图片的就讲么这么多了,有个注意的地方是,可能有些配置在兼容性上会有一些问题,所以需要在不同的机型上测试一下看看效果。
下面再来谈谈预览图片的实现。
2.预览图片
不使用图片预览,点击上传图片后无法查看 例如下图:我重新换了图片,图片路径变了,但图片没变
2.1添加图片预览代码
图片变了可以预览查看
源码1: 使用 URL.createObjectURL 预览
源码2:使用 FileReader 预览
预览图片总结:
两种方法的对比
- 我个人更加倾向于使用
URL.createObjectURL()
。主要原先它的 API 简洁,同步读取,并且他返回的是一个URL
,比FileReaer
返回的base64 更加精简。兼容性上,两者都差不多,都是在WD
的阶段。性能上的对比, 在 chrome 上, 选择了一张 2M 的图片,URL.createObjectURL()
用时是 0 , 而FileReader
用时 20ms 左右。 0 感觉不太合理,虽然这个方法立刻就会返回一个 URL ,但是我猜测实际上这个 URL 指定的内容还没有生成好,应该是异步生成的,然后才渲染出来的。所以并没有很好的办法来对比他们的性能。
3.裁剪图片
- 关于图片的裁剪,很自然的会想到使用
canvas
,确实是要通过canvas
, 但是如果全部我们自己来实现,可能需要做比较多的工作,所以为了省力,我们可以站在巨人的肩膀上。比较优秀的图片裁剪库是cropperjs , 该库可以对图片进行缩放、移动和旋转。随后会持续更新canvas,(我也在学…永远保持谦逊,人外人天外天,拒绝凡尔赛 )
cropperjs
的详细配置这里就不展开了 ,需要的可以自己去看文档就好。下面我们就以这个库为基础,实现一个裁剪人脸的例子:
源码: 当然这个只是简单的写下,为了写博客在电脑操作小伙伴要自行查看下移动端兼容
4.上传
- 前面的操作已经完成了图片上传前的准备,包括选择图片、预览图片、编辑图片等,那接下来就可以上传图片了。上面的例子中,使用了
cropperInstance.getCroppedCanvas()
方法来获取到对应的canvas
对象 。有了canvas
对象就好办了,因为canvas.toBlob()
方法可以取得相应的Blob
对象,然后,我们就可以把这个Blob
对象添加到FromData
进行无刷新的提交了。大概的代码如下:
change(e) {
// 1.手写的input需要一个对象将本地图片转换为对应的格式来上传
let formData = new FormData();
//2. e.target.files就是选中的图片的一个
formData.append(“file”, e.target.files[0]);
// 3. 将formData这个对象传给修改头像的接口
updateImg(formData).then((res) => {
//4.此时已经传到修改头像接口了
//4.1 传到修改头像的接口后 , 在更新接口中 再次更新头像属性
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
前端面试题是我面试过程中遇到的面试题,每一次面试后我都会复盘总结。我做了一个整理,并且在技术博客找到了专业的解答,大家可以参考下:
由于篇幅有限,只能分享部分面试题,完整版面试题及答案可以【点击我】阅读下载哦~
感悟
备注:前端)**
前端面试题是我面试过程中遇到的面试题,每一次面试后我都会复盘总结。我做了一个整理,并且在技术博客找到了专业的解答,大家可以参考下:
由于篇幅有限,只能分享部分面试题,完整版面试题及答案可以【点击我】阅读下载哦~
感悟
春招面试的后期,运气和实力都很重要,自己也是运气比较好,为了回馈粉丝朋友们(毕竟自己也玩了这么久哈哈哈),整理个人感悟和总结以上。最后祝愿大家能够收获理想offer!!