移動端圖片上傳解決方案localResizeIMG先壓縮後ajax無重新整理上傳

來源:互聯網
上載者:User

標籤:cti   order   title   src   erro   val   像素   request   des   

現在科技太發達,行動裝置像素越來越高,隨便一張照片2M+,但是要做移動端圖片上傳和pc上略有不同,移動端你不能去限制圖片大小,讓使用者先處理圖片再上傳,這樣不現實。所以理解的解決方案就是在上傳先進行圖片壓縮,然後再把壓縮後的圖片上傳到伺服器。

一翻google之後,發現了localResizeIMG,它會對圖片進行壓縮成你指定寬度及品質度並轉換成base64圖片格式,那麼我們就可以把這個base64通過ajax傳到後台,再進行儲存,先壓縮後上傳的目的就達到了。

處理過程
  1. LocalResizeIMG壓縮圖片
  2. AjaxPost圖片base64到後台
  3. 後台接收base64並儲存,返回狀態
前台代碼

重點,引用LocalResizeIMG.js(外掛程式主體)及mobileBUGFix.mini.js(移動端的補丁)

<!DOCTYPE HTML><html><head><meta charset="UTF-8"><title>移動端圖片上傳解決方案localResizeIMG先壓縮後ajax無重新整理上傳</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="請點擊上傳圖片" style="display:none;" />   <div class="imglist"></div>   <a href="javascript:void(0);" onclick="uploadphoto.click()" class="uploadbtn">點擊上傳檔案</a></div><div style="text-align:center;margin-top:50px;">@ <a href="http://www.devdo.net/">碼農小兵,專註web開發 歡迎投稿</a></div> </body></html>
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= ‘<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通過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,圖片尺寸變大了,會失真),不知道大家有沒有什麼好的解決方案。
DEMO 下載

 

移動端圖片上傳解決方案localResizeIMG先壓縮後ajax無重新整理上傳

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.