『壹』 js對從伺服器取得的圖片進行壓縮顯示
瀏覽器前端裡面跑js沒辦法壓縮圖片的,js沒io,只能載入圖片,無法讀入真正的圖片數據
『貳』 前端圖片壓縮優化工具conversion
image-conversion 是一個簡單易用的 JS 圖片轉換工具,提供了多種 Image、Canvas、File 和 dataURL 之間的轉換方法。
另外,image-conversion 可以指定大小來壓縮圖片。
1、將圖像壓縮到 200kb:
2、以 0.9 的質量壓縮圖像
image-conversion 提供了多種方法來實現 Image、Canvas、File 和 dataURL 之間的轉換,如下:
1、imagetoCanvas(image[, config]) {Promise(Canvas)}
將圖像對象轉換為畫布對象。
2、dataURLtoFile(dataURL[, type]) {Promise(Blob)}
將 dataURL 字元串轉換為 File(Blob) 對象,相當於把畫布的內容轉換成blob,type可以設置最終圖片的格式。
type的值可以為:"image/png", "image/jpeg", "image/gif"
3、compress(file, config) {Promise(Blob)}
壓縮文件(Blob)對象。
4、compressAccurately(file, config) {Promise(Blob)}
根據大小壓縮文件(Blob)對象。
5、canvastoDataURL(canvas[, quality, type]) {Promise(string)}
將 Canvas 對象轉換為 dataURL 字元串,該方法可以進行壓縮。
6、canvastoFile(canvas[, quality, type]) {Promise(Blob)}
將 Canvas 對象轉換為 Blob 對象,此方法可以進行壓縮。
7、dataURLtoImage(dataURL) {Promise(Image)}
將 dataURL 字元串轉換為圖像對象。
8、downloadFile(file[, fileName])
下載圖片到本地。
9、filetoDataURL(file) {Promise(string)}
將 File(Blob) 對象轉換為 dataURL 字元串。
10、urltoBlob(url) {Promise(Blob)}
通過圖像 url 載入所需的 Blob 對象。
11、urltoImage(url) {Promise(Image)}
通過圖片 url 載入所需的 Image 對象。
覺得效果不錯的請幫忙加個關注點個贊,經常分享前端實用開發技巧
『叄』 怎麼用JavaScript在線壓縮圖片
主要用了兩個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 ****(***)