MichaelGong / mobileUpLoadImage

移动端图片上传并处理

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

mobileUpLoadImage

移动端图片上传并处理

目前我所知道的移动端上传图片的方式大致有几种:

  • 直接上传图片(由于移动端照出来的图片会比较大,这种方式上传的图片没有经过压缩,上传时间比较长且有可能失败)
  • 直接通过某些兼容移动端的插件进行上传
  • 通过URL.createObjectURL的方式读取图片并处理后上传base64格式的数据(兼容性)
  • 通过FileReader的方式读取并处理后上传base64格式的数据(兼容性) 前两种方式不用说,想试验的可以自行百度,主要说下后面两种方式:

URL.createObjectURL兼容性:Android4.0以上、IOS6.1以上

FileReader兼容性:Android3.0以上、IOS6.1以上

所以两种方式都有兼容性问题。

这两种方式操作起来其实都很方便

首先你需要在页面上创建一个input标签,

<input type="file" capture="camera" id="imgInput" />

如果是通过FileReader,你的代码大致应该这样:

var imgInput = document.getElementById('imgInput');
function getImageByFileReader(){
	if(typeof FileReader == 'undefined'){  
		alert('你的浏览器不支持FileReader!');
		return;
	}
	var file = null;
	imgInput.onchange = function(){
		if(this.files.length<=0){
			return;
		}
		file = this.files[0];
		//判断是否是图片
		if(!/image\/\w+/.test(file.type)){  
			alert("请上传图片!");  
			return false;  
		}  
		//创建FileReader对象
		var reader = new FileReader();
		reader.readAsDataURL(file);
		reader.onload = function(){
			console.log(this.result);
			//this.result是一个base64格式的字符串,你可以操作这个base64的字符串
		}
	}
}
getImageByFileReader();

如果是通过URL.createObjectURL的形式:

function getImageByURL(){
	var URL = URL || webkitURL;
	if(typeof URL == 'undefined'){
		lert('你的浏览器不支持URL对象');
		return;
	}
	var file = null;
	imgInput.onchange = function(){
		file = this.files[0];
		var blob = URL.createObjectURL(file);
		//blob是一个blob字符串,将这个字符串放到img的src中就可以正常的展示图片
	}
}
getImageByURL();

两种方式都不难。

https://github.com/think2011/localResizeIMG4这里有个插件,可以利用这个插件来达到上面我们所说的目的,用法很简单,而且这个插件对各种平台的canvas中bug做了优化处理,很方便。

图片本身有一些基础的属性,这些属性被统称为exif信息,exif信息包含了比如图片拍摄时间、焦距、曝光度、拍摄方向等等诸多信息,由于拍摄时拍照者可能会将拍照设备旋转各种方向,所以我们可以利用exif中的拍摄方向的属性来调整图片在我们页面中的展示方向,http://code.ciaoca.com/javascript/exif-js/这个插件可以获取图片的exif信息。

About

移动端图片上传并处理


Languages

Language:HTML 100.0%