localResizeIMG先壓縮后使用ajax無(wú)刷新上傳(移動(dòng)端)
下面通過(guò)文字說(shuō)明和代碼分析的方式給大家分享移動(dòng)端圖片上傳之localResizeIMG先壓縮后ajax無(wú)刷新上傳,具體實(shí)現(xiàn)過(guò)程請(qǐng)看下文。
現(xiàn)在科技太發(fā)達(dá),移動(dòng)設(shè)備像素越來(lái)越高,隨便一張照片2M+,但是要做移動(dòng)端圖片上傳和pc上略有不同,移動(dòng)端你不能去限制圖片大小,讓用戶先處理圖片再上傳,這樣不現(xiàn)實(shí)。所以理解的解決方案就是在上傳先進(jìn)行圖片壓縮,然后再把壓縮后的圖片上傳到服務(wù)器。
一翻google之后,發(fā)現(xiàn)了localResizeIMG,它會(huì)對(duì)圖片進(jìn)行壓縮成你指定寬度及質(zhì)量度并轉(zhuǎn)換成base64圖片格式,那么我們就可以把這個(gè)base64通過(guò)ajax傳到后臺(tái),再進(jìn)行保存,先壓縮后上傳的目的就達(dá)到了。
處理過(guò)程
LocalResizeIMG壓縮圖片
AjaxPost圖片base64到后臺(tái)
后臺(tái)接收base64并保存,返回狀態(tài)
前臺(tái)代碼
重點(diǎn),引用LocalResizeIMG.js(插件主體)及mobileBUGFix.mini.js(移動(dòng)端的補(bǔ)?。?/strong>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>移動(dòng)端圖片上傳解決方案localResizeIMG先壓縮后ajax無(wú)刷新上傳</title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width , initial-scale=1.0 , user-scalable=0 , minimum-scale=1.0 , maximum-scale=1.0" />
<script type='text/javascript' src='js/jquery-2.0.3.min.js'></script>
<script type='text/javascript' src='js/LocalResizeIMG.js'></script>
<script type='text/javascript' src='js/patch/mobileBUGFix.mini.js'></script>
<style type="text/css">
body{font-family:"微軟雅黑"}
.uploadbtn{ display:block;height:40px; line-height:40px; color:#333; text-align:center; width:100%; background:#f2f2f2; text-decoration:none; }
.imglist{min-height:200px;margin:10px;}
.imglist img{width:100%;}
</style>
</head>
<body>
<div style="width:500px;margin:10px auto; border:solid 1px #ddd; overflow:hidden; ">
<input type="file" id="uploadphoto" name="uploadfile" value="請(qǐng)點(diǎn)擊上傳圖片" style="display:none;" />
<div class="imglist"></div>
<a href="javascript:void(0);" onclick="uploadphoto.click()" class="uploadbtn">點(diǎn)擊上傳文件</a>
</div>
<div style="text-align:center;margin-top:50px;">@ <a >碼農(nóng)小兵,專注web開發(fā) 歡迎投稿</a></div>
</body>
</html>
Js部份,localResizeIMG及Ajax提交部份
使用方法
$('input:file').localResizeIMG({
width: 400,//寬度
quality: 1,//質(zhì)量
success: function (result) {
result.base64/result.clearBase64
}
});
localResizeIMG參數(shù):
width:縮略圖寬度
quality:圖片質(zhì)量,0—1,越大越好
localResizeIMG返回值
result.base64:帶圖片類型的base64編碼,可直接用于img標(biāo)簽的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= '<img src="'+data.url+'" alt="" />';
$(".imglist").append(attstr);
}
},
complete :function(XMLHttpRequest, textStatus){
},
error:function(XMLHttpRequest, textStatus, errorThrown){ //上傳失敗
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.readyState);
alert(textStatus);
}
});
}
});
});
保存文件
在上面一步中,我們把result.clearBase64通過(guò)Ajax傳入到upload.php中,接下來(lái)我們就要在upload.php中接收base64參數(shù),把它轉(zhuǎn)換成img文件保存來(lái)服務(wù)器中,并給出提示。
$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,不能保證原有格式。
當(dāng)圖片寬度小于localResizeIMG設(shè)置的width參數(shù)時(shí),圖片會(huì)被拉申,從而引起圖片失真(比如width高為600,圖片只在400px時(shí),壓縮后的圖片就變成了600px,圖片尺寸變大了,會(huì)失真),不知道大家有沒(méi)有什么好的解決方法。
以上內(nèi)容是本文介紹localResizeIMG先壓縮后使用ajax無(wú)刷新上傳的全部?jī)?nèi)容,希望大家喜歡。
- 利用ajaxfileupload插件實(shí)現(xiàn)文件上傳無(wú)刷新的具體方法
- php ajax無(wú)刷新上傳圖片實(shí)例代碼
- ThinkPHP結(jié)合AjaxFileUploader實(shí)現(xiàn)無(wú)刷新文件上傳的方法
- ajax(iframe)無(wú)刷新提交表單、上傳文件
- jQuery+AJAX實(shí)現(xiàn)網(wǎng)頁(yè)無(wú)刷新上傳
- js動(dòng)態(tài)創(chuàng)建上傳表單通過(guò)iframe模擬Ajax實(shí)現(xiàn)無(wú)刷新
- swfupload ajax無(wú)刷新上傳圖片實(shí)例代碼
- php+ajax無(wú)刷新上傳圖片實(shí)例代碼
- jsp+ajax實(shí)現(xiàn)無(wú)刷新上傳文件的方法
- ajax實(shí)現(xiàn)無(wú)刷新上傳文件功能
相關(guān)文章
JavaScript用20行代碼實(shí)現(xiàn)虎年春節(jié)倒計(jì)時(shí)
春節(jié)將至,相信大家跟小編一樣很激動(dòng)呀。為了迎接虎年春節(jié)到來(lái),小編為大家準(zhǔn)備了一個(gè)虎年春節(jié)倒計(jì)時(shí),僅20行代碼用js就實(shí)現(xiàn)啦。感興趣的可以動(dòng)手試一試2022-01-01
JavaScript實(shí)現(xiàn)圖像模糊化的方法實(shí)例
這篇文章主要介紹了JavaScript實(shí)現(xiàn)圖像模糊化的方法,文中先進(jìn)行簡(jiǎn)單介紹,而后給出了完整的實(shí)例代碼,有需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-01-01
js實(shí)現(xiàn)連個(gè)數(shù)字相加而不是拼接的方法
這篇文章主要介紹了js如何實(shí)現(xiàn)連個(gè)數(shù)字相加而不是拼接,需要的朋友可以參考下2014-02-02
js 判斷checkbox是否選中的實(shí)現(xiàn)代碼
大家在很多場(chǎng)合也許會(huì)遇到判斷頁(yè)面是否有元素選中,下面介紹的是利用js判斷是否選中CheckBox的方法。2010-11-11
手把手教你實(shí)現(xiàn)一個(gè)JavaScript時(shí)間軸組件
本文主要是給大家?guī)?lái)一個(gè)時(shí)間軸的組件開發(fā)教程,其主要功能就是可以拖動(dòng)時(shí)間軸來(lái)定位當(dāng)前時(shí)間,可以通過(guò)鼠標(biāo)滾輪來(lái)修改當(dāng)前時(shí)間分辨率,需要的可以參考一下2022-10-10
JavaScript位置參數(shù)實(shí)現(xiàn)原理及過(guò)程解析
這篇文章主要介紹了JavaScript位置參數(shù)實(shí)現(xiàn)原理及過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
js+html5實(shí)現(xiàn)canvas繪制網(wǎng)頁(yè)時(shí)鐘的方法
這篇文章主要介紹了js+html5實(shí)現(xiàn)canvas繪制網(wǎng)頁(yè)時(shí)鐘的方法,涉及html5圖形繪制的基礎(chǔ)技巧,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05

