移动端利用html5对照片处理的教程实例


本文摘自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官网酷炫的下载引导页动画特效的示例代码

更多相关阅读请进入《移动端》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...