所有分类
  • 所有分类
  • 后端开发
H5 页面开发中调用相机、压缩图片转 base64 及上传后台服务器的注意事项

H5 页面开发中调用相机、压缩图片转 base64 及上传后台服务器的注意事项

这次给大家带来H5调用相机拍照并压缩图片,H5调用相机拍照并压缩图片的注意事项有哪些,下面就是实战案例,一起来看一下。整理文档,搜刮出一个H5调用相机拍照并压缩图片的实例代码,稍微整理精简一下做下分享。H5如何调用相机

H5现在火爆了前端市场,尤其是在手机应用这块儿,那叫一个受欢迎。那么,怎么用好这个H5?首先得知道怎么用它调出手机里的相机。虽然觉得简单,其实挺麻烦的。比如说,一种叫`属性`的方法,在IOS设备上没啥问题,但在安卓机子上就容易出兼容性问题。因为在安卓上,用户点完后,相机、图库、文件管理器各种选项都冒出来,搞得人头大。

要搞定这个问题,我们得找别的招儿。也许可以试试用JavaScript动态控制相机,不过这得有点儿编程知识才行。别忘了,得照顾到用户的感受,让他们用起来舒服,一点儿也不费劲儿。

图片压缩的技术解析

搞定拍照后,我们来把拍好的照片压缩一下!其实这就像调皮捣蛋的小朋友玩陶泥一样——调整图片的分辨率和质量。在做这个事时,我会先设定图片最大边长为800像素,然后再保持其他部分按原画比缩小。这样处理,保证了图片的精美度不受太大影响。

除了看分辨率,图片质量也是要注意的!我每次都会把照片质量压缩到原图的80%,这样既能保持图像清晰又不至于文件太大。不过,千万别调得太狠,否则图片可能变形,那可就不好了。

//相机
//相册

图片转base64的方法

搞定了压缩图片以后,下一步就是把图片变成base64编码。这个步骤特别关键,因为通过这种方式,我们就可以把图片直接嵌在HTML或CSS里,不用再依赖外部文件,这样就能省去很多HTTP请求,提升网页加载速度,还能更好地管理图片!

把文件转成base64码的方法很容易,用JavaScript就行了。里边有个叫FileReader的东西,能帮我们异步读文件,然后再转code64码。虽然不难,但在整个流程里还是重要的一步~

H5调用相机和相册的兼容性问题

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获取

咱们在做项目时,总碰上一个让人头疼的问题,就是H5咋拍照这事儿。就像我刚说的,“属性用在安卓机子上,效果不好呀。

有个方法就是用第三方库,比如cordova-plugin-camera,它提供了一个通用的调用相机和相册的方法。但是,用这个库也得做好适配,保证每个设备都能用起来体验好!

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图片旋转问题的策略

用H5拍照并压缩图后,在iOS设备上可能会发现图旋转了,为啥?原来iOS拍照时会记下方向,但压缩的时候容易丢或者被误解。

咱们要搞清图片的正反面,得用下个库叫`exif.js`!它专门用来读图中EXIF(数码照片的一些内部数据)信息的,尤其是方向这部分。然后用`EXIF.getData`和`EXIF.getTag`两个方法,就能把当时拍哪儿了搞清楚了。根据这个信息,咱们就可以给图片调整过来,保证看起来顺眼儿,不管你拿着什么牌子的手机。

完整代码示例和实战经验

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

看这儿!这里有段完整代码给你展示如何用H5让手机照相并压缩图片,顺便还能解决图片里EXIF信息和上传到服务器这两桩事儿。看完这段,以后就能搞定这项技术,用到自己的项目上也是分分钟的事儿。

实战经验可是值钱,能帮咱们在做项目时避开那些烦人的麻烦。希望看完这篇文章后,你能学到点实用的窍门,以后干活儿更顺手!

总的说来,用H5刷卡拍照片整合压缩图,这可是个挺难搞但是好用得不得了的功能。这样做既能让用户感觉更好,也可以大大提高网页速度。实现的时候可能会碰到点麻烦,但只要咱找到对路的方法,问题就都不是事儿!

最后给你问个问题哈:你看H5技术还有啥好玩儿的地方没被利用?随时来评论区聊聊;觉得这篇有用就给点个赞,分享出去让更多人看到。

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

原文链接:https://www.icz.com/technicalinformation/web/vue2/2024/06/17751.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?