Получите высоту/ширину изображения в Javascript (в идеале без загрузки изображения вообще)

Извините, если на это уже был дан ответ, но я не могу найти его, если это так.

Я хочу найти высоту и ширину файла изображения в Javascript. Мне не нужно показывать изображение на странице, просто высоту и ширину.

В настоящий момент у меня есть следующий код, но он возвращает высоту и ширину 0 (в Mozilla 5).

  var img = new Image();
  img.src = "./filename.jpg";
  var imgHeight = img.height;
  var imgWidth = img.width;
  alert("image height = "  + imgHeight + ", image width = " + imgWidth);

Файл определенно существует, он находится в том же каталоге, что и HTML, и у него нет высоты и ширины 0:)

Что я делаю неправильно?

Ответы

Ответ 1

Если изображение не загружено, у него не будет установлен "высота и ширина". Вам нужно подождать, пока изображение будет полностью загружено, а затем проверьте его размер. Возможно, что-то вроде этого:

function getWidthAndHeight() {
    alert("'" + this.name + "' is " + this.width + " by " + this.height + " pixels in size.");
    return true;
}
function loadFailure() {
    alert("'" + this.name + "' failed to load.");
    return true;
}
var myImage = new Image();
myImage.name = "image.jpg";
myImage.onload = getWidthAndHeight;
myImage.onerror = loadFailure;
myImage.src = "image.jpg";

Ответ 2

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

Для тестирования изменения abc123 в источнике изображения на любую случайную строку, чтобы предотвратить кеширование.

Существует JSFiddle Demo.

<div id="info"></div>
<img id="image" src="https://upload.wikimedia.org/wikipedia/commons/d/da/Island_Archway,_Great_Ocean_Rd,_Victoria,_Australia_-_Nov_08.jpg?abc123">

<script>
getImageSize($('#image'), function(width, height) {
    $('#info').text(width + ',' + height);
});

function getImageSize(img, callback) {
    var $img = $(img);

    var wait = setInterval(function() {
        var w = $img[0].naturalWidth,
            h = $img[0].naturalHeight;
        if (w && h) {
            clearInterval(wait);
            callback.apply(this, [w, h]);
        }
    }, 30);
}
</script>

Ответ 3

Свойства высоты и ширины элемента изображения (например, свойства offsetHeight и offsetWidth любого элемента), return 0 вместо фактических значений, пока он не будет добавлен в какой-либо документ (и если его атрибут style.display не установлен в "none" ).
Общим способом обойти это является отображение изображения за пределами видимой области вашей страницы; ваши пользователи не увидят его, а его свойства высоты и ширины вернут фактические значения вместо 0. Затем вы должны удалить изображение из документа.

var img = new Image();
img.src = "./filename.jpg";
img.style.position = "absolute";
img.style.left = -9999;             // Image width must not exceed 9999 pixels
img.style.visibility = "hidden";    // Maybe you can remove this
document.body.appendChild(img);
var imgHeight = img.height;
var imgWidth = img.width;
alert("image height = "  + imgHeight + ", image width = " + imgWidth); 
document.body.removeChild(img);     // Removes the image from the DOM (This does not destroy the image element)

Ответ 4

Если вы проверите эту ссылку здесь, это способ получить все размеры изображения в каталоге с PHP, который проверяет его, не загружая его на страницу. Это может вам помочь. Вы можете передать его в js с помощью

var dimensions = <?php echo json_encode($imageDimensions)?>

PHP Получить размеры изображений в каталоге

Я думаю, что это лучший подход, если вы действительно не хотите загружать изображения