本文摘自PHP中文网,作者零下一度,侵删。
前一阵在公司用vue开发webapp,遇到一个用户拍照或者调用手机相册展示图片,然后上传服务器的需求,接触前端仅半年的我走上了一路踩坑的道路,下面我来说说我遇到的那些坑!各种坑汇总
调取手机相册
iOS到没什么问题,安卓手机好坑啊,网上搜了很多办法,要么就是有的手机不管用,要么就是只能调相册不能调相机,要么就是只能调相机不能调相册
调取相册拿到相片后渲染到界面上,iOS又出了问题,通过相机拍摄的图片是旋转过90度的,或者苹果里面正常的图片到了安卓机展示是旋转90的,也有的图片苹果上正常在后台是歪的。身为一个iOS开发出身的我这就不理解了,经过几番查证,得出一个结论,苹果的相机是歪的!
图片渲染过后浏览器会崩溃,尤其是在微信,不得不说,微信好坑啊,什么东西到微信上就会出现各种问题!
然后是图片上传的问题,一开始采用了文件上传的形式,后来结果测试反馈,很多安卓机不能上传成功!说多了都是泪,不多说进正题!
总结一下我的解决办法,希望能对跟我一样还是个小白的人有所帮助
调取手机相册和相机
采用h5调取相册 虽然是一句话从网页调取,但是如果想相册,相机都调的话 要这么写 (我真的是查了好久)
1 2 3 | < form id = "uploadForm" enctype = "multipart/form-data" >
< input class = "upload-open-photo" accept = "image/*" type = "file" id = "filechooser" v-on:change = "btnUploadFile($event)" />
</ form >
|
图片渲染
图片渲染我采用了canvas ,利用了一个叫 exif.js的插件获取一下手机拍摄的方向(也就是拍照时是竖着拿手机还是横着,),然后判断下设备,对iOS设备的三个方向对图片进行旋转,利用canvas画到画布上
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | btnUploadFile(e){
//获取图片
var self = this;
var filechooser = document.getElementById('filechooser');
var previewer = document.getElementById('previewer');
var that = e.target;
var files = that.files;
var file = files[0];
//判断拍摄方向,
EXIF.getData(file,function(){
self.orientation=EXIF.getTag(this,'Orientation');
});
self.fileData = file;
// 接受 jpeg, jpg, png 类型的图片
if (!/\/(?:jpeg|jpg|png)/i.test(file.type)){
return;
}
var reader = new FileReader();
reader.onload = function() {
var result = this.result;
var img = new Image();
//进行图片的渲染
img.onload = function() {
//图片旋转压缩处理后的base64
var compressedDataUrl =self.compress(img,self.fileData.type);
//渲染到img标签上
self.toPreviewer(compressedDataUrl);
img = null;
};
img.src = result;
};
reader.readAsDataURL(self.fileData);
},
|
图片渲染
图片渲染时不但要把图片旋转,还要进行压缩,由于现在相机像素太高,高清图片会导致浏览器崩溃,当然如果是做的微信开发,只需要在微信浏览器中适配,那么可以参考微信jssdk中的调用相册的方法,这样就不会有图歪和崩溃的问题了。当然如果不是只做微信,我们还是要进行压缩,同样是采用canvas
(mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html )
阅读剩余部分
相关阅读 >>
html5 canvas实现绘制一个像素宽的细线
html5难学吗
用h5的canvas做恐怖动画
html5利用canvas绘画二级树形结构图
canvas原生实现前端网页移动端签名
html5中内容安全策略(csp)
你有认真学习html5吗?那么你应该读的书都在这里了
h5实现桌面通知以及提示功能的实例
html5需遵循怎样的6个设计原则?
html5仿amd9官网酷炫的下载引导页动画特效的示例代码
更多相关阅读请进入《移动端》频道 >>
人民邮电出版社
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者
转载请注明出处:木庄网络博客 » 移动端利用html5对照片处理的教程实例