百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>html5教程> H5调取相机照相并紧缩图片-
分享文章到:

H5调取相机照相并紧缩图片-

发布时间:08/01 来源:未知 浏览: 关键词:
这次给大家带来H5调取相机照相并紧缩图片,H5调取相机照相并紧缩图片的注意事项是什么,下面就是实战案例,一起来看一下。 这次给大家带来H5调取相机照相并紧缩图片,H5调取相机照相并紧缩图片的注意事项是什么,下面就是实战案例,一起来看一下。

整理文档,搜刮出一个H5调取相机照相并紧缩图片的实例代码,略微整理精简一下做下分享。

配景

比来要做一个h5的页面,主要功能就是调取相机照相或者是相册选图而且把相片紧缩转base64之后上传到后台办事器,然后办事器返回辨认效果。

前端的主要功能点有:

  1. H5怎样调取相机

  2. 图片怎样紧缩

  3. 图片转base64

H5调取相机/相册

调取相机最简略的办法就是运用input file[camera]属性:

//相机
//相册

这个种办法兼容性还是有题目的,在苹果手机上可以正常打开相机,但是在安卓手机上点击之后是相机、图库、文件治理器等混合选中项。在网上搜了许多都没有什么好的解决方法,只能继续往下写了。。。

图片紧缩

图片紧缩就要用到FileReader了。

FileReader对象允许Web利用程序异步读取存储在盘算机上的文件的内容,运用File或Blob对象指定要读取的文件或数据。

是一个可以运用足本在其中绘制图形的HTML元素,可以绘制图形和简略的动画。

图片紧缩要紧缩图片的辨论率和质量,辨论率紧缩我这里是设定了图片的最大边为800,另一边按照图片原有比例缩放,也可以设定图片整体的缩放比例。

var MAX_WH=800;
var image=new Image();
image.onload=function () {
  if(image.height > MAX_WH) {
    // 宽度等比例缩放 *= 
    image.width *= MAX_WH/ image.height;
    image.height = MAX_WH;
  }
  if(image.width > MAX_WH) {
    // 宽度等比例缩放 *= 
    image.height *= MAX_WH/ image.width;
    image.width = MAX_WH;
  }
}
image.src=dataURL;//dataURL通过FileReader猎取

然后就是紧缩图片的质量了,这里设定紧缩了80%,要是设定太小图片就失真了。动态新建标签然后紧缩图片:

var quality=80;
var cvs = document.createElement('canvas');
cvs.width = image.width;
cvs.heigh = image.height;
var context=cvs.getContext("2d");
context.drawImage(image, 0, 0,image.width, image.height);
dataURL = cvs.toDataURL('image/jpeg', quality/100);

然后就是上传到办事器并展现办事器的效果啦,然而事情并没有那么顺利。。。ios手机照相紧缩之后图片莫名的扭转了,继续解决题目。

解决IOS图片扭转

第一援用exif.js,通过EXIF.getData和EXIF.getTag猎取照相标的目的信息。

//file通过input标签猎取
EXIF.getData(file,function(){
  orientation=EXIF.getTag(file,'Orientation');
});

下面给出每个orientation值对应到苹果手机照相的含义:

orientation描述
3苹果横屏拍摄,此时home键在左侧,图片相关于原始位置扭转了180度
6苹果竖屏拍摄,此时home键鄙人方(正常特长机的标的目的),图片相关于原始位置逆时针扭转可90度
8苹果竖屏拍摄,此时home键在上方,图片相关于原始位置顺时针扭转了90度

猎取图片的标的目的信息之后,依据猎取到的值作响应的扭转操纵。

switch (orientation) {
  case 6:
  case 8:
    cvs.width = height;
    cvs.height = width;
    break;
}
var context=cvs.getContext("2d");
switch(orientation){
  //苹果横屏拍摄,此时home键在左侧
  case 3:
  // 180度向左扭转
  context.translate(width, height);
  context.rotate(Math.PI);
  break;
  //苹果竖屏拍摄,此时home键鄙人方(正常特长机的标的目的)
  case 6:
  context.rotate(0.5 * Math.PI);
  context.translate(0, -height);
  break;
  //苹果竖屏拍摄,此时home键在上方
  case 8:
  // 逆时针扭转90度
  context.rotate(-0.5 * Math.PI);
  context.translate(-width, 0);
  break;
}

然后再上传图片,发明在IOS下图片已经正常了。

下面给出完备代码:

$('input[type=file]').change(function(e) {
  var file = this.files[0];
  var mime_type=file.type;
  var orientation=0;
  if (file && /^image\//i.test(file.type)) {
    EXIF.getData(file,function(){
      orientation=EXIF.getTag(file,'Orientation');
    });
    var reader = new FileReader();
    reader.onloadend = function () {
      var width,height;
      var MAX_WH=800;
      var image=new Image();
      image.onload=function () {
        if(image.height > MAX_WH) {
          // 宽度等比例缩放 *= 
          image.width *= MAX_WH / image.height;
          image.height = MAX_WH;
        }
        if(image.width > MAX_WH) {
          // 宽度等比例缩放 *= 
          image.height *= MAX_WH / image.width;
          image.width = MAX_WH;
        }
        //紧缩
        var quality=80;
        var cvs = document.createElement('canvas');
        cvs.width = width = image.width;
        cvs.height =height = image.height;
        switch (orientation) {
          case 6:
          case 8:
            cvs.width = height;
            cvs.height = width;
            break;
        }
        var context=cvs.getContext("2d");
        //解决ios图片扭转题目 
        switch(orientation){
          //苹果横屏拍摄,此时home键在左侧
          case 3:
          // 180度向左扭转
          context.translate(width, height);
          context.rotate(Math.PI);
          break;
          //苹果竖屏拍摄,此时home键鄙人方(正常特长机的标的目的)
          case 6:
          context.rotate(0.5 * Math.PI);
          context.translate(0, -height);
          break;
          //苹果竖屏拍摄,此时home键在上方
          case 8:
          // 逆时针扭转90度
          context.rotate(-0.5 * Math.PI);
          context.translate(-width, 0);
          break;
        }
        context.drawImage(image, 0, 0,image.width, image.height);
        dataURL = cvs.toDataURL('image/jpeg', quality/100);
        //猎取辨认效果
        ...
      }
      image.src=dataURL;
    };
    reader.readAsDataURL(file);
  }else{
    alert("只能辨认图片!")
  }
});

信赖看了本案牍例你已经把握了办法,更多出色请关注 百分百源码网 其它相干文章!

举荐浏览:

H5中History模式的运用详解

localstorage和sessionstorage运用记载

以上就是H5调取相机照相并紧缩图片的细致内容,更多请关注 百分百源码网 其它相干文章!

打赏

打赏

取消

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

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

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

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有152人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板