html5图片以文件流形式上传时失真,html5上传及压缩图像

下述插件jquery.upLoadImg.js旨在不借助任何插件的前提下,优化移动端用户在web页面上传图片卡顿或消耗流量过大问题。大概思路,先用FileReader对象从本地获取上传图像,转为base64图片流,再由此生成Image对象,用canvas按比例压缩绘制,并返回压缩后的图片流,上送给后台服务器

HTML:(html是次要的,自由发挥吧)

%E9%BB%98%E8%AE%A4%E8%83%8C%E6%99%AF%E5%9B%BE%E7%89%87

jquery.upLoadImg.js:

/**

* upLoadImg (http://blog.csdn.net/u598975767/article/details/75500890)

* 基于jquery+html5 上传及压缩图片

* @version v0.1

* @author benboerba

*/

;(function($){

var imgFiles=function(el,opt){

this.element=el;

this.file=el[0].files[0];

this.default={

"showImage":"",//需要展示的img标签Id

"width":375,//目标图片宽度,为保证图片不失真或变形,高度会等比例变化

"quality":0.8,//图片质量,取值0-1之间

"callBack":function(){}

};

this.options=$.extend({},this.default,opt);

};

/**

* 压缩图片 创建一个image对象,给canvas绘制使用

* @params image:图片对象

* @return 返回一个上送给后台的图片流

*/

imgFiles.prototype.compress=function(image){

var cvs = document.createElement('canvas');

//根据设备宽度高,设定缩放后的宽度,计算出缩放比例,建议以宽度为准

var scale = this.options.width / image.width;

//计算等比缩小后图片宽高

cvs.width = image.width*scale;

cvs.height = image.height*scale;

var ctx = cvs.getContext('2d');

ctx.drawImage(image, 0, 0, cvs.width, cvs.height);

var newImageData = cvs.toDataURL(this.file.type,this.options.quality);

var sendData = newImageData.replace("data:"+this.file.type+";base64,",'');

return sendData;

};

/**

* 上传图片

*/

imgFiles.prototype.getImages=function(){

var $that=this;

var files = $that.file;

//检验是否为图像文件

if(!/image\/\w+/.test(files.type)){

alert("请选择图片");

$that.element.val("");

return false;

}

var reader = new FileReader();

//将文件以Data URL形式读入页面

reader.readAsDataURL(files);

reader.οnlοad=function(e){

var result = this.result;

if($("#"+$that.options.showImage)){

$("#"+$that.options.showImage).attr({"src": result});

}

var image = new Image();

image.src = result;

image.onload = function(){

$that.options.callBack($that.compress(image));

};

};

};

$.fn.upLoadImg=function(options){

var img= new imgFiles(this, options);

img.getImages();

};

})(jQuery);

调用js:

上述代码基于jquery,别忘了导入jquery框架!第一次封装插件,有不到的地方,望大牛指出纠正!谢谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值