1. 程式人生 > >圖片上傳時獲取圖片的寬和高

圖片上傳時獲取圖片的寬和高

con element 執行 事件 body 無法 使用 圖片加載 fun

  經常會遇到圖片上傳的問題,這時候我們會傳圖片的地址,寬和高到服務器,至於圖片上傳就不說了,這裏主要說圖片上傳時獲取圖片的原始寬和高的問題。

  一般而言,我們把圖片上傳至服務器時,服務器會返回一個上傳地址給我們,這個就是我們圖片的url了,但是光有這個還是不夠的,因為還要將圖片的寬和高傳給服務器,這時候就可以這樣做了。直接上代碼:  

var img = new Image()
img.src = url

  然後就可以使用img.width和img.height來獲取圖片的寬和高了。當然僅僅這樣做是不夠的,因為圖片上傳是異步的,並不能直接使用該方法獲取圖片的寬和高,這樣獲取到的都是0.

  必須將上傳的圖片放置body標簽裏面才能去使用load事件,可以使用appendChild將img標簽插入body標簽裏面(document.getElementsByTagName(‘body‘)[0].appendChild(img)),這樣做會有一個問題,每次上傳圖片後頁面底部都會多一張圖,可以使用 display將其隱藏,然後使用onload方法,等圖片加載完。 

img.onload = function(){
  w = img.width;
  h = img.height        
}

  然後將要發的請求放在一個方法裏面,在onload事件裏面去調用方法,否則load方法外面是獲取不到寬和高的。

  當然了,還有另外一種方法,就是使用ES6的辦法。 

async function foo(){
 	let img = new Image()
 	img.src = ‘https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2546717774,3910079056&fm=200&gp=0.jpg‘
 	document.getElementsByTagName(‘body‘)[0].appendChild(img) // 圖片插入body標簽中,否則無法執行load事件
        img.style.display = ‘none‘  // 將圖片隱藏
return {‘width‘:img.width,‘height‘:img.height} } foo().then((val) => { // async函數內部return語句返回的值,會成為then方法回調函數的參數。所以此處的val就是上面return語句返回的值 console.log(val) // {‘width‘:img.width,‘height‘:img.height} })

  

  

圖片上傳時獲取圖片的寬和高