在图像完全加载之前使用 Javascript 获取图像尺寸

IT技术 javascript image loading dimensions
2021-02-24 06:51:03

我已经阅读了有关在图像完全加载后获取图像尺寸的各种方法,但是一旦开始加载,是否有可能获得任何图像的尺寸?

我没有通过搜索找到太多相关信息(这让我相信这是不可能的),但事实上浏览器(在我的例子中是 Firefox)显示了我在标题后面的新标签中打开的任何图像的尺寸它刚刚开始加载图像让我希望实际上有一种方法,而我只是错过了找到它的正确关键字。

3个回答

您是对的,可以在完全加载之前获取图像尺寸。

这是一个解决方案(演示):

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

img.src = 'some-image.jpg';

var poll = setInterval(function () {
    if (img.naturalWidth) {
        clearInterval(poll);
        console.log(img.naturalWidth, img.naturalHeight);
    }
}, 10);

img.onload = function () { console.log('Fully loaded'); }
知道这一点很酷。我要添加的一件事是,如果 img 在图像标签或 CSS 中设置了高度或宽度,那么您的方法只返回该值,而不是图像的自然大小。一些浏览器支持 naturalWidth 和 naturalSize 属性。你可以在你的小提琴jsfiddle.net/jfriend00/rQwD4 的这个 mod 中看到
2021-04-20 06:51:03
@katspaugh 感谢您的评论和提供的演示,这正是我一直在寻找的!@jfriend00 我知道自然尺寸问题,但感谢修改后的示例,这对我来说意味着更少的工作。
2021-04-27 06:51:03
如果您clearInterval在获得naturalWidthand的非零值后立即调用似乎更有效naturalHeight,就像 aleemb 的解决方案是如何做到的(而不是等到图像加载完毕)。
2021-05-03 06:51:03

以下代码在可用时立即返回宽度/高度。用于测试将abc123图像源更改为任何随机字符串以防止缓存。

还有一个JSFiddle 演示

<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>
这是一个不错的 jQuery 替代方案,但不应该是公认的答案,因为它添加了 OP 不需要的依赖项。
2021-04-26 06:51:03

一种方法是使用 HEAD 请求,它只要求响应的 HTTP 标头。我知道在 HEAD 响应中,包括身体的大小。但我不知道是否有任何可用的图像大小。

我不确定图像的尺寸是否在 HEAD 响应中,无论如何,您只能根据same-origin要求执行此操作,或者如果您专门将服务器设置为允许cross-origin.
2021-05-13 06:51:03