Определение размера файла изображения + размеры с помощью Javascript? - PullRequest
41 голосов
/ 21 августа 2009

Как часть веб-приложения, после загрузки и рендеринга изображений на веб-странице мне нужно определить размер файла изображения (КБ) и разрешение в контексте браузера (чтобы я мог, например, отобразить эту информацию на странице. Это должно быть сделано на стороне клиента, очевидно. Должно быть в состоянии решить x-browser без элемента управления ActiveX или Java-апплета (IE7 +, FF3 +, Safari 3+, IE6 приятно иметь), хотя это не так. должно быть одинаковое решение для каждого браузера.

В идеале это должно быть сделано с использованием системного Javascript, но если мне абсолютно необходим JQuery или похожая библиотека (или ее небольшая часть), это можно сделать.

Ответы [ 10 ]

73 голосов
/ 21 августа 2009

Редактировать

Чтобы получить текущий размер пикселя в браузере элемента DOM (в вашем случае элементов IMG), исключая границы и поля, вы можете использовать свойства clientWidth и clientHeight .

var img = document.getElementById('imageId'); 

var width = img.clientWidth;
var height = img.clientHeight;

Теперь, чтобы получить размер файла, теперь я могу думать только о свойстве fileSize , которое Internet Explorer предоставляет для документа и IMG элементов ...

Редактировать 2: Что-то приходит мне в голову ...

Чтобы получить размер файла, размещенного на сервере, вы можете просто сделать HEAD HTTP-запрос , используя Ajax. Этот вид запроса используется для получения метаинформации о URL, подразумеваемом запросом, без передачи какого-либо его содержания в ответе.

В конце HTTP-запроса у нас есть доступ к HTTP-заголовкам ответа, включая Content-Length , который представляет размер файла в байтах.

Базовый пример использования raw XHR :

var xhr = new XMLHttpRequest();
xhr.open('HEAD', 'img/test.jpg', true);
xhr.onreadystatechange = function(){
  if ( xhr.readyState == 4 ) {
    if ( xhr.status == 200 ) {
      alert('Size in bytes: ' + xhr.getResponseHeader('Content-Length'));
    } else {
      alert('ERROR');
    }
  }
};
xhr.send(null);

Примечание: Имейте в виду, что когда вы делаете запросы Ajax, вы ограничены Одинаковой политикой происхождения , которая позволяет вам делать запросы только в пределах одного домена.

Проверьте рабочее подтверждение концепции здесь .

Редактировать 3:

1.) Что касается Content-Length, я думаю, что несоответствие размера может произойти, например, если ответ сервера разархивирован, вы можете выполнить несколько тестов, чтобы увидеть, происходит ли это на вашем сервере.

2.) Чтобы получить исходные размеры изображения, вы можете создать элемент IMG программно, например:

var img = document.createElement('img');

img.onload = function () { alert(img.width + ' x ' + img.height); };

img.src='http://sstatic.net/so/img/logo.png';
10 голосов
/ 11 марта 2014

Проверьте размер загруженного изображения, используя Javascript

<script type="text/javascript">
    function check(){
      var imgpath=document.getElementById('imgfile');
      if (!imgpath.value==""){
        var img=imgpath.files[0].size;
        var imgsize=img/1024; 
        alert(imgsize);
      }
    }
</script>

HTML-код

<form method="post" enctype="multipart/form-data" onsubmit="return check();">
<input type="file" name="imgfile" id="imgfile"><br><input type="submit">
</form>
5 голосов
/ 24 ноября 2017

Получение исходных размеров изображения

Если вам нужно получить исходные размеры изображения (не в контексте браузера), свойства clientWidth и clientHeight не работают, так как они возвращают неверные значения, если изображение растянуто / сократился через css.

Чтобы получить исходные размеры изображения , используйте свойства naturalHeight и naturalWidth .

var img = document.getElementById('imageId'); 

var width = img.naturalWidth;
var height = img.naturalHeight;

p.s. Это не отвечает на первоначальный вопрос, так как принятый ответ делает работу. Это служит дополнением к этому.

5 голосов
/ 25 октября 2017

Как насчет этого:

var imageUrl = 'https://cdn.sstatic.net/Sites/stackoverflow/img/sprites.svg';
var blob = null;
var xhr = new XMLHttpRequest(); 
xhr.open('GET', imageUrl, true); 
xhr.responseType = 'blob';
xhr.onload = function() 
{
    blob = xhr.response;
    console.log(blob, blob.size);
}
xhr.send();

http://qnimate.com/javascript-create-file-object-from-url/

из-за Одинаковая политика происхождения , работает только под тем же источником

2 голосов
/ 11 июня 2016

Работники сферы обслуживания имеют доступ к информации заголовка, включая заголовок Content-Length.

Сервисные работники немного сложны для понимания, поэтому я создал небольшую библиотеку под названием sw-get-headers .

Чем нужно:

  1. подписаться на response событие библиотеки
  2. определить URL-адрес изображения среди всех сетевых запросов
  3. здесь, вы можете прочитать заголовок Content-Length!

Обратите внимание, что ваш сайт должен быть на HTTPS , чтобы использовать Service Workers, браузер должен быть совместим с Service Workers, и изображения должны быть того же источника как ваша страница.

1 голос
/ 31 июля 2017

Большинство людей ответили, как можно узнать размеры загруженного изображения, поэтому я просто попытаюсь ответить на другую часть вопроса - зная размер файла загруженного изображения.

Вы можете сделать это с помощью API синхронизации времени ресурса.,В частности, для этой цели можно использовать свойства TransferSize, encodedBodySize и decodedBodySize.

Ознакомьтесь с моим ответом здесь для фрагмента кода и дополнительной информации, если вы ищете: JavaScript - получение размера в байтах из HTML img src

1 голос
/ 21 августа 2009

Размеры можно получить, используя getElement(...).width и ...height.

Поскольку JavaScript не может получить доступ к чему-либо на локальном диске по соображениям безопасности, вы не можете просматривать локальные файлы. Это также верно для файлов в кеше браузера.

Вам действительно нужен сервер, который может обрабатывать запросы AJAX. На этом сервере установите службу, которая загружает образ и сохраняет поток данных в фиктивном выводе, который просто считает байты. Обратите внимание, что вы не всегда можете полагаться на поле заголовка Content-length , поскольку данные изображения могут быть закодированы. В противном случае было бы достаточно отправить запрос HTTP HEAD.

0 голосов
/ 18 июня 2010
var img = new Image();
img.src = sYourFilePath;
var iSize = img.fileSize;
0 голосов
/ 21 августа 2009

Вы можете найти размер изображения на странице, используя что-то вроде

document.getElementById('someImage').width

размер файла, однако вам придется использовать что-то на стороне сервера

0 голосов
/ 21 августа 2009

Единственное, что вы можете сделать, это загрузить изображение на сервер и проверить размер и размер изображения, используя некоторый язык на стороне сервера, например C #.

Edit:

Ваша потребность не может быть выполнена только с использованием JavaScript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...