HTML5前端图片压缩,兼容手机

主要用了两个html5的 API,一个file,一个canvas,压缩主要使用cnavas做的,file是读取文件,之后把压缩好的照片放入内存,最后内存转入表单下img.src,随着表单提交。

照片是自己用单反拍的,5M多,压缩下面3张分别是600多kb,400多kb,300kb的最后那张失真度很大了,压缩效率蛮高的。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta charset="utf-8" />
<title>File API Test</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<style>
#test {
	display: none;
}
</style>
</head>
<body>
	<input type="file" id="fileImg">
	<form>
		<img src="" id="test" alt="">
	</form>
	<script>
		function handleFileSelect(evt) {
			// var filebtn = document.getElementById(id);
			// console.log(filebtn);
			// var files = filebtn.target.files;
			// console.log(filebtn.target);
			// console.log(files);
			var files = evt.target.files;
			for ( var i = 0, f; f = files[i]; i++) {

				// Only process image files.
				if (!f.type.match('image.*')) {
					continue;
				}

				var reader = new FileReader();

				// Closure to capture the file information.
				reader.onload = (function(theFile) {
					return function(e) {
						// Render thumbnail.
						// console.log(evt.target.files[0]);
						// console.log(e.target);
						console.log(e.target.result);
						var i = document.getElementById("test");
						i.src = event.target.result;
						console.log($(i).width());
						console.log($(i).height());
						$(i).css('width', $(i).width() / 10 + 'px');
						//$(i).css('height',$(i).height()/10+'px');
						console.log($(i).width());
						console.log($(i).height());
						var quality = 50;
						i.src = jic.compress(i, quality).src;
						console.log(i.src);
						i.style.display = "block";
					};
				})(f);

				// Read in the image file as a data URL.
				reader.readAsDataURL(f);
			}
		}

		document.getElementById('fileImg').addEventListener('change',
				handleFileSelect, false);
		
		var jic = {
		        /**
		         * Receives an Image Object (can be JPG OR PNG) and returns a new Image Object compressed
		         * @param {Image} source_img_obj The source Image Object
		         * @param {Integer} quality The output quality of Image Object
		         * @return {Image} result_image_obj The compressed Image Object
		         */
		 
		        compress: function(source_img_obj, quality, output_format){
		             
		             var mime_type = "image/jpeg";
		             if(output_format!=undefined && output_format=="png"){
		                mime_type = "image/png";
		             }
		             
		 
		             var cvs = document.createElement('canvas');
		             //naturalWidth真实图片的宽度
		             cvs.width = source_img_obj.naturalWidth;
		             cvs.height = source_img_obj.naturalHeight;
		             var ctx = cvs.getContext("2d").drawImage(source_img_obj, 0, 0);
		             var newImageData = cvs.toDataURL(mime_type, quality/100);
		             var result_image_obj = new Image();
		             result_image_obj.src = newImageData;
		             return result_image_obj;
		        }
		}
	</script>
</body>
</html>

在PC端是没有问题,手机端就获取不到data了,


整理至网络:

http://www.gbtags.com/gb/share/2991.htm

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值