js圖片壓縮上傳
主要用了兩個html5的 API,一個file,一個canvas,壓縮主要使用cnavas做的,file是讀取文件,之後把壓縮好的照片放入內存,最後內存轉入表單下img.src,隨著表單提交。
照片是自己用單反拍的,5M多,壓縮下面3張分別是600多kb,400多kb,300kb的最後那張失真度很大了,壓縮效率蠻高的。
<!DOCTYPE html>
<html><head> <meta charset="utf-8"/> <title>File API Test</title> <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script> <script type="text/javascript" src="js/JIC.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);</script></body></html>
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; }, function ****(***)
B. 怎樣在客戶端 利用js 壓縮圖片 大小,然後上傳至伺服器比如2M壓縮成幾十KB
無法實現,js沒有許可權去修改本地文件的,只能是將大圖上傳到伺服器後再壓縮
C. js 大文件分片上傳處理如何實現
推薦採用webuploader控制項來解決。
關於WebUploader的功能說明:
大文件上傳續傳
支持超大文件上傳(100G+)和續傳,可以關閉瀏覽器,重啟系統後仍然繼續上傳。
開源
提供ASP.NET,JSP,PHP示例和源代碼,其中JSP提供MySQL,Oracle,SQL Server資料庫的配置和示例代碼。
分片、並發
分片與並發結合,將一個大文件分割成多塊,並發上傳,極大地提高大文件的上傳速度。
當網路問題導致傳輸錯誤時,只需要重傳出錯分片,而不是整個文件。另外分片傳輸能夠更加實時的跟蹤上傳進度。
預覽、壓縮
支持常用圖片格式jpg,jpeg,gif,bmp,png預覽與壓縮,節省網路數據傳輸。
解析jpeg中的meta信息,對於各種orientation做了正確的處理,同時壓縮後上傳保留圖片的所有原始meta數據。
多途徑添加文件
支持文件多選,類型過濾,拖拽(文件&文件夾),圖片粘貼功能。上傳本地指定路徑的文件,不需要通過點擊按鈕選擇文件。
粘貼功能主要體現在當有圖片數據在剪切板中時(截屏工具如QQ(Ctrl + ALT + A), 網頁中右擊圖片點擊復制),Ctrl + V便可添加此圖片文件。
HTML5 & FLASH
兼容主流瀏覽器和低版本瀏覽器,介面一致,實現了兩套運行時支持,用戶無需關心內部用了什麼內核。而且支持IE6,IE8瀏覽器。
同時Flash部分沒有做任何UI相關的工作,方便不關心flash的用戶擴展和自定義業務需求。
基於內存映射模式進行IO操作,充分發揮操作系統性能。
MD5秒傳
當文件體積大、量比較多時,支持上傳前做文件md5值驗證,一致則可直接跳過。
如果服務端與前端統一修改演算法,取段md5,可大大提升驗證性能,耗時在20ms左右。
易擴展、可拆分
採用可拆分機制, 將各個功能獨立成了小組件,可自由搭配。
採用AMD規范組織代碼,清晰明了,方便高級玩家擴展。
D. js對從伺服器取得的圖片進行壓縮顯示
瀏覽器前端裡面跑js沒辦法壓縮圖片的,js沒io,只能載入圖片,無法讀入真正的圖片數據
E. 如何實現JS中圖片壓縮方法
1.這個用PS轉換成JPG或者GIF或png比較大小選用。
F. 怎麼在js 裡面限制上傳圖片的大小不能超過 1M
這樣設置的:
1、先用form標簽創建一個上傳的表單。
<formid="form1"name="form1"method="post"action=""enctype="multipart/form-data">
<p><inputtype="hidden"name="MAX_FILE_SIZE"value="100000"/></p>
<p><inputname="userfile"id="userfile"type="file"onchange="check()"/></p>
</form>
2、用Javascript設置格式和大小。
<scriptlanguage="JavaScript"type="text/javascript">functioncheck(){varaa=document.getElementById("userfile").value.toLowerCase().split('.');//以「.」分隔上傳文件字元串//varaa=document.form1.userfile.value.toLowerCase().split('.');//以「.」分隔上傳文件字元串if(document.form1.userfile.value==""){alert('圖片不能為空!');returnfalse;}else{if(aa[aa.length-1]=='gif'||aa[aa.length-1]=='jpg'||aa[aa.length-1]=='bmp'
||aa[aa.length-1]=='png'||aa[aa.length-1]=='jpeg')//判斷圖片格式{varimagSize=document.getElementById("userfile").files[0].size;alert("圖片大小:"+imagSize+"B")if(imagSize<1024*1024*1)alert("圖片大小在1M以內,為:"+imagSize/(1024*1024)+"M");returntrue;}else{alert('請選擇格式為*.jpg、*.gif、*.bmp、*.png、*.jpeg的圖片');//returnfalse;}}}</script>
圖片超過1M則不能上傳 如圖:
G. 手機移動端html5、js如何實現視頻上傳並壓縮視頻質量,或者降低手機攝像頭拍攝質量
你好 HTML5和javascript是不能壓縮視頻的,只能把視頻傳到伺服器端,由後端來壓縮視頻,也不能控制相機的拍攝質量,除非你用JAVA寫Android客戶端才可以壓縮。希望我的回答能夠幫助到你,如果還有什麼疑問可以繼續追問。
H. 當前使用JS在前端完成圖片壓縮的有哪些方法
這個base64的編碼並不能減小圖片,反而增大了,大概增大了1/3。至於有沒有其他的方法我就不知道了,不過直接構造Blob對象上傳就行了,為什麼要上傳dataurl
I. js超大文件上傳如何實現
利用File文件介面將文件切成順序的若干小片,然後上傳到伺服器,全部上傳完後由服務端進行合並和校驗
J. 求js 修改圖片本生大小,並上傳圖片。
javascript是運行在客戶端的腳本,沒法在本地處理你的圖片壓縮。
只能藉助伺服器端。