2017-04-04 43 views
1

我看到了很多答案,但我沒有找到一個很好的解決方案:集大小 - angularjs

我在$ scope.file =/9J/4VeIRXhpZgAASUkqAAgAAAAL [圖片.. ] 它的大小是5217984 = 5 MB

但是這張圖片很大,我的角度應用/網絡服務不支持它。

我該怎麼辦?如何?

我試圖將這5 MB圖像轉換爲500 KB的圖像,但我沒有得到它。任何人都可以幫助我嗎?

我不知道它是否可行,但我需要一個JavaScript函數來將該5MB圖像轉換爲500 KB的圖像,例如,我可以提高它。

在我的應用程序中,當我用500 KB的fir例子放置一個圖像時,它的一切都正確。

+0

可能的複製[JavaScript的減小尺寸和圖像的質量based64編碼的代碼(HTTP://計算器。 com/questions/20379027/javascript-reduce-size-and-quality-of-image-with-based64-encoded-code) – georgeawg

+0

我試過了,但是我得到這個錯誤:'錯誤:CanvasRenderingContext2D.drawImage的參數1無法轉換爲以下任何一種:HTMLImageElement,HTMLCanvasElement,HTMLVideoElement,ImageBitmap.' – kfm

+0

當詢問您的代碼導致的問題時,您將得到m如果您提供可用於重現問題的代碼,則可以得到更好的答案。 – georgeawg

回答

1
$scope.getData= function() { 

    var reader = new FileReader(); 
    reader.onload = $('input[type=file]')[0].files; 
    var img = new Image(); 
    img.src =(reader.onload[0].result); 
     img.onload = function() { 
      if(this.width > 640) 
      { 
       //Get resized image 
       img= imageToDataUri(this, 640, 480); 
      } 
     } 
}; 

//Resize the image (in the example 640 x 480px) 
function imageToDataUri(img, width, height) { 

    // create an off-screen canvas 
    var canvas = document.createElement('canvas'), 
    ctx = canvas.getContext('2d'); 

    // set its dimension to target size 
    canvas.width = width; 
    canvas.height = height; 

    // draw source image into the off-screen canvas: 
    ctx.drawImage(img, 0, 0, width, height); 

    // encode image to data-uri with base64 version of compressed image 
    return canvas.toDataURL(); 
} 
0

如果您有機會獲得base64編碼只使用此功能:的

$scope.getFileSize = function (base64encoded) { 
    try { 
     var encodedString = base64encoded.split(',')[1] 
    } catch (errorMsg) { 
     return false; 
    } 

    var decodedBase64 = atob(encodedString); 

    return decodedBase64.length; 
};