站长图库

html5+exif.js+canvas实现手机端照片上传预览、压缩、旋转功能

 发布时间 2017-08-06 20:51:12 热度 4186 下载 8

 当前位置:  首页>>网页特效>>图片特效

html5+canvas进行移动端手机照片上传时,发现ios手机上传竖拍照片会逆时针旋转90度,横拍照片无此问题;Android手机没这个问题。

因此解决这个问题的思路是:获取到照片拍摄的方向角,对非横拍的ios照片进行角度旋转修正。

利用exif.js读取照片的拍摄信息,详见 http://code.ciaoca.com/javascript/exif-js/

这里主要用到Orientation属性。

Orientation属性说明如下:


旋转角度参数
1
顺时针90°6
逆时针90°8
180°3


<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
    <title>图片上传</title>
    <script type="text/javascript" src="js/jquery-1.8.3.js"></script>
    <script type="text/javascript" src="js/uploadPicture/mobileBUGFix.mini.js" ></script>
    <script type="text/javascript" src="js/uploadPicture/uploadImage.js" ></script>
        <script type="text/javascript" src="js/exif.js" ></script>
</head>
<body>
	<div style="height: 50px; line-height: 50px;text-align: center;border-bottom: 1px solid #171E28;">
			上传图片:
			<input type="file" accept="image/*" id="uploadImage" capture="camera" onchange="selectFileImage(this);" />
		</div>
		<div style="margin-top: 10px;">
			<img alt="preview" src="" id="myImage"/>
		</div>
</body>
</html>


自己写的js:


function selectFileImage(fileObj) {
	var file = fileObj.files['0'];
	//图片方向角 added by lzk
	var Orientation = null;
	
	if (file) {
		console.log("正在上传,请稍后...");
		var rFilter = /^(image\/jpeg|image\/png)$/i; // 检查图片格式
		if (!rFilter.test(file.type)) {
			//showMyTips("请选择jpeg、png格式的图片", false);
			return;
		}
		// var URL = URL || webkitURL;
		//获取照片方向角属性,用户旋转控制
		EXIF.getData(file, function() {
		   // alert(EXIF.pretty(this));
		    EXIF.getAllTags(this); 
		    //alert(EXIF.getTag(this, 'Orientation')); 
		    Orientation = EXIF.getTag(this, 'Orientation');
		    //return;
		});
		
		var oReader = new FileReader();
		oReader.onload = function(e) {
			//var blob = URL.createObjectURL(file);
			//_compress(blob, file, basePath);
			var image = new Image();
			image.src = e.target.result;
			image.onload = function() {
				var expectWidth = this.naturalWidth;
				var expectHeight = this.naturalHeight;
				
				if (this.naturalWidth > this.naturalHeight && this.naturalWidth > 800) {
					expectWidth = 800;
					expectHeight = expectWidth * this.naturalHeight / this.naturalWidth;
				} else if (this.naturalHeight > this.naturalWidth && this.naturalHeight > 1200) {
					expectHeight = 1200;
					expectWidth = expectHeight * this.naturalWidth / this.naturalHeight;
				}
				alert(expectWidth+','+expectHeight);
				var canvas = document.createElement("canvas");
				var ctx = canvas.getContext("2d");
				canvas.width = expectWidth;
				canvas.height = expectHeight;
				ctx.drawImage(this, 0, 0, expectWidth, expectHeight);
				alert(canvas.width+','+canvas.height);
				
				var base64 = null;
				var mpImg = new MegaPixImage(image);
					mpImg.render(canvas, {
						maxWidth: 800,
						maxHeight: 1200,
						quality: 0.8,
						orientation: Orientation
					});
					
				base64 = canvas.toDataURL("image/jpeg", 0.8);
				
				//uploadImage(base64);
				$("#myImage").attr("src", base64);
			};
		};
		oReader.readAsDataURL(file);
	}
}


用到的第三方js文件:mobileBUGFix.mini.js



评论(0)条

    站长图库

    站长素材 - 建站资源分享平台

    猜你喜欢
    HTML5全屏手风琴内容切换代码

    HTML5全屏手风琴内容切换代码

    图片特效 189 2020-04-11

    HTML5全屏手风琴内容切换代码是一款手风琴导航菜单内容切换特效。

    自学网在线课程教育网站源码下载 自适应手机端 帝国cms内核

    自学网在线课程教育网站源码下载 自适应手机端 帝国cms内核

    行业整站 1495 2019-09-24

    本套学习视频源码支持视频付费购买功能,在线支付方式有支付宝、财付通和网银在线安装说明:运行/e/install/inde...

    手机端SVG图标导航页面切换代码

    手机端SVG图标导航页面切换代码

    菜单导航 157 2020-01-25

    手机端SVG图标导航页面切换代码是一款基于jQuery+CSS3+SVG制作的移动端图标导航触屏点击页面背景切换效果代码...

    HTML5响应式防水产品科技公司网站模板

    HTML5响应式防水产品科技公司网站模板

    HTML模版 244 2020-01-06

    HTML5响应式防水产品科技公司网站模板,自适应分辨率,兼容PC端和移动端,全套模板,包括网站首页、关于我们、产品中心、...