2017-02-18 6 views
0

Я хотел бы прочитать «ширину» и «вершину» файла изображения, который я выбираю с помощью элемента ввода HTML (type is file). Моя проблема в том, что я получаю значения 0/0, когда я выбираю файл изображения в первый раз. Когда я выбираю второй файл изображения (неважно, какой из них), я получаю правильные значения для ширины и высоты для первого/предыдущего изображения.HTML5: Тип входного файла - данные для чтения

Как я могу сразу же получить ширину и высоту файла изображения, который я выбрал?

<!DOCTYPE html> 
 
<html> 
 
<head> 
 
\t <meta charset="utf-8"> 
 
</head> 
 
<body> 
 

 
\t <input type="file" id="fileInput" accept="image/*" onchange="handleFiles(this.files)"> 
 
\t 
 
\t <script src="https://code.jquery.com/jquery-3.1.1.min.js" integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" crossorigin="anonymous"></script> 
 
\t <script> 
 
\t \t var img = new Image(); 
 
\t \t //set input back to default on refresh: 
 
\t \t $('#fileInput')[0].value = ""; 
 
\t \t 
 
\t \t function handleFiles(fileList) { 
 
\t \t \t if (!fileList.length) { 
 
\t \t \t \t console.log("No files selected!"); 
 
\t \t \t } else { 
 
\t \t \t \t console.log(fileList.length); 
 
\t \t \t \t console.log(fileList[0]); 
 
\t \t \t \t 
 
\t \t \t \t img.src = window.URL.createObjectURL(fileList[0]); 
 
\t \t \t \t 
 
\t \t \t \t console.log("src: " + img.src); 
 
\t \t \t \t console.log("width: " + img.width + "/height: " + img.height); 
 
\t \t \t \t 
 
\t \t \t \t img.onload = function() { 
 
\t \t \t \t \t window.URL.revokeObjectURL(this.src); 
 
\t \t \t \t } 
 
\t \t \t } 
 
\t \t } 
 
\t </script> 
 
</body> 
 
</html>

+0

Я пометил ваш ответ полезным, но получаю сообщение: "Спасибо за обратную связь! Голоса, сделанные теми, у кого меньше 15 репутации, записаны, но не изменяйте публично опубликованный рейтинг. – voland

ответ

2

Вы должны получить ширина/высота в onload событий (img.onload = function() {...})

Примечание как @guest271314 указал, используйте naturalWidth/naturalHeight вместо width/height

<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <meta charset="utf-8"> 
 
</head> 
 

 
<body> 
 

 
    <input type="file" id="fileInput" accept="image/*" onchange="handleFiles(this.files)"> 
 

 
    <script src="https://code.jquery.com/jquery-3.1.1.min.js" integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" crossorigin="anonymous"></script> 
 
    <script> 
 
    var img = new Image(); 
 
    //set input back to default on refresh: 
 
    $('#fileInput')[0].value = ""; 
 

 
    function handleFiles(fileList) { 
 
     if (!fileList.length) { 
 
     console.log("No files selected!"); 
 
     } else { 
 
     console.log(fileList.length); 
 
     console.log(fileList[0]); 
 

 
     img.src = window.URL.createObjectURL(fileList[0]); 
 

 
     console.log("src: " + img.src); 
 

 
     img.onload = function() { 
 
      window.URL.revokeObjectURL(this.src); 
 

 
      console.log("width: " + img.naturalWidth + "/height: " + img.naturalHeight); 
 

 
     } 
 
     } 
 
    } 
 
    </script> 
 
</body> 
 

 
</html>