下面通过文字说明和代码分析的方式给大家分享移动端图片上传之localresizeimg先压缩后ajax无刷新上传,具体实现过程请看下文。
现在科技太发达,移动设备像素越来越高,随便一张照片2m+,但是要做移动端图片上传和pc上略有不同,移动端你不能去限制图片大小,让用户先处理图片再上传,这样不现实。所以理解的解决方案就是在上传先进行图片压缩,然后再把压缩后的图片上传到服务器。
一翻google之后,发现了localresizeimg,它会对图片进行压缩成你指定宽度及质量度并转换成base64图片格式,那么我们就可以把这个base64通过ajax传到后台,再进行保存,先压缩后上传的目的就达到了。
处理过程
localresizeimg压缩图片
ajaxpost图片base64到后台
后台接收base64并保存,返回状态
前台代码
重点,引用localresizeimg.js(插件主体)及mobilebugfix.mini.js(移动端的补丁)
移动端图片上传解决方案localresizeimg先压缩后ajax无刷新上传
点击上传文件
@ 码农小兵,专注web开发 欢迎投稿
js部份,localresizeimg及ajax提交部份
使用方法
$('input:file').localresizeimg({ width: 400,//宽度 quality: 1,//质量 success: function (result) { result.base64/result.clearbase64 }});
localresizeimg参数:
width:缩略图宽度
quality:图片质量,0—1,越大越好
localresizeimg返回值
result.base64:带图片类型的base64编码,可直接用于img标签的src,如“data:image/jpeg;base64,/9j/4aaqskzjrgabaqaaaqabaad/…2wbdaayebqyfbay”;
result.clearbase64:不带图片类型的编码,如“/9j/4aaqskzjrgabaqaaaqabaad/…2wbdaayebqyfbay”
$(document).ready(function(e) { $('#uploadphoto').localresizeimg({ width: 400, quality: 1, success: function (result) { var submitdata={ base64_string:result.clearbase64, }; $.ajax({ type: post, url: upload.php, data: submitdata, datatype:json, success: function(data){ if (0 == data.status) { alert(data.content); return false; }else{ alert(data.content); var attstr= ''; $(.imglist).append(attstr); } }, complete :function(xmlhttprequest, textstatus){ }, error:function(xmlhttprequest, textstatus, errorthrown){ //上传失败 alert(xmlhttprequest.status); alert(xmlhttprequest.readystate); alert(textstatus); } }); } });});
保存文件
在上面一步中,我们把result.clearbase64通过ajax传入到upload.php中,接下来我们就要在upload.php中接收base64参数,把它转换成img文件保存来服务器中,并给出提示。
$base64_string = $_post['base64_string']; $savename = uniqid().'.jpeg';//localresizeimg压缩后的图片都是jpeg格式 $savepath = 'images/'.$savename; $image = base64_to_img( $base64_string, $savepath ); if($image){ echo '{status:1,content:上传成功,url:'.$image.'}'; }else{ echo '{status:0,content:上传失败}'; } function base64_to_img( $base64_string, $output_file ) { $ifp = fopen( $output_file, wb ); fwrite( $ifp, base64_decode( $base64_string) ); fclose( $ifp ); return( $output_file ); }
不足之处
localresizeimg压缩后的图片模式都是jpeg,不能保证原有格式。
当图片宽度小于localresizeimg设置的width参数时,图片会被拉申,从而引起图片失真(比如width高为600,图片只在400px时,压缩后的图片就变成了600px,图片尺寸变大了,会失真),不知道大家有没有什么好的解决方法。
以上内容是本文介绍localresizeimg先压缩后使用ajax无刷新上传的全部内容,希望大家喜欢。