H5调用手机摄像头拍照,如何压缩后上传

H5调用手机摄像头拍照后,怎样压缩再上传?


实际的压缩功能,就是利用canvas画布功能,将图片进行裁剪后保存图片的base64数据流,然后上传。


案例全部代码,示下:

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>关于html5中如何调用相机拍照并且压缩图片的示例详解</title>
</head>
<body>
	<h2>关于html5中如何调用相机拍照并且压缩图片的示例详解</h2>
	
	照相机:
	<input type="file" capture=camera accept="image/*">
	
	<br /><br />
	
	相册:
	<input type="file" accept="image/*">
	
	
<script type="text/javascript" language="JavaScript">
	$('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){
	          //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;
	        }
	        context.drawImage(image, 0, 0,image.width, image.height);
	        dataURL = cvs.toDataURL('image/jpeg', quality/100);
	        //获取识别结果
	        ...
	      }
	      image.src=dataURL;
	    };
	    reader.readAsDataURL(file);
	  }else{
	    alert("只能识别图片!")
	  }
	});
</script>

</body>
</html>

以上就是关于“ H5调用手机摄像头拍照,如何压缩后上传 ” 的全部内容。

在HTML5中,调用手机摄像头拍摄照片通常涉及到JavaScript和一些设备访问API,比如Web API (Media Streams)。以下是简单的步骤: 1. **获取用户授权**:首先,你需要在`<script>`标签内通过`getUserMedia()`方法请求用户的媒体权限,尤其是对相机的访问。 ```html <script> function getUserMediaSuccess(stream) { // 接下来处理流 } function getUserMediaError(err) { console.error('Failed to access camera: ', err); } navigator.mediaDevices.getUserMedia({ video: true }) .then(getUserMediaSuccess) .catch(getUserMediaError); </script> ``` 2. **创建视频元素**:创建一个HTML5 `<video>`元素,并设置其srcObject属性为从`getUserMedia()`获取的stream,这样视频就会显示实时摄像头画面。 ```html <video id="camera" width="300" height="200"></video> ``` 3. **触发拍照**:当用户想要拍照时,你可以创建一个Canvas画布,然后从video元素上截取帧,保存为图片。例如: ```javascript document.getElementById('takePicture').addEventListener('click', function() { var canvas = document.createElement('canvas'); canvas.width = video.videoWidth; canvas.height = video.videoHeight; var ctx = canvas.getContext('2d'); ctx.drawImage(video, 0, 0, canvas.width, canvas.height); // 然后将canvas转换为Blob并下载 }); ``` 4. **下载图片**:将生成的canvas转换为Blob,然后提供给用户下载。 ```javascript var imgBlob = canvas.toDataURL('image/jpeg'); // 或者 image/png var link = document.createElement('a'); link.href = imgBlob; link.download = 'photo.jpg'; // 可自定义文件名 link.click(); ``` 请注意,以上示例需要在现代浏览器支持WebRTC和getUserMedia的情况下运行,并且可能受到浏览器安全策略的影响。在实际应用中,可能还需要处理更多边缘情况和兼容问题。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值