如何使用 JavaScript 获取图像大小(高度和宽度)?

IT技术 javascript jquery image
2021-01-11 22:40:26

是否有任何 JavaScript 或 jQuery API 或方法来获取页面上图像的尺寸?

6个回答

您可以使用Javascript以编程方式获取图像并检查尺寸...

const img = new Image();
img.onload = function() {
  alert(this.width + 'x' + this.height);
}
img.src = 'http://www.google.com/intl/en_ALL/images/logo.gif';

如果图像不是标记的一部分,这会很有用。

这个属性可以追溯到多远,浏览器明智?到处都找不到。提前致谢..没关系:developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/width
2021-03-20 22:40:26

clientWidthclientHeight是 DOM 属性,用于显示 DOM 元素内部尺寸(不包括边距和边框)的当前浏览器内尺寸。因此,在 IMG 元素的情况下,这将获得可见图像的实际尺寸。

var img = document.getElementById('imageid'); 
//or however you get a handle to the IMG
var width = img.clientWidth;
var height = img.clientHeight;
@Nicky 完全正确。它给出了在该实例中呈现的图像的尺寸
2021-03-10 22:40:26
document.getElementById打字时间更长,但比$('#...')[0].
2021-03-12 22:40:26
@Mat-visual$.fn.width$.fn.height.
2021-03-17 22:40:26
正确答案是使用 img.naturalWidth 和 img.naturalHeight
2021-03-25 22:40:26
@RexM 在 Chrome 35 上,速度提高了 16 倍:jsperf.com/document-getelementbyid-vs-jquery/5
2021-03-27 22:40:26

另外(除了 Rex 和 Ian 的回答)还有:

imageElement.naturalHeight

imageElement.naturalWidth

这些提供了图像文件本身的高度和宽度(而不仅仅是图像元素)。

现在 IE9 和所有现代 Web 浏览器都支持此功能。
2021-03-25 22:40:26

如果您正在使用 jQuery 并且您正在请求图像大小,则必须等到它们加载,否则您只会得到零。

$(document).ready(function() {
    $("img").load(function() {
        alert($(this).height());
        alert($(this).width());
    });
});
@AndersLindén - 请参阅 Akseli 为加载事件添加的墨水。有一个专门的部分专门介绍图像。技术上的答案是“不”,但实际上我从未遇到过使用这种方法的网站的问题。
2021-03-29 22:40:26
是否可以在加载之前获取图像属性?
2021-04-02 22:40:26
负载处理器中的宽度和高度是否始终可用?
2021-04-04 22:40:26
但是如果技术上的答案是否定的,就不能用了?不是吗?
2021-04-08 22:40:26

我认为对这些答案的更新很有用,因为投票得最多的答复之一建议使用clientWidth和 clientHeight,我认为它现在已经过时了。

我用 HTML5 做了一些实验,看看实际返回了哪些值。

首先,我使用了一个名为 Dash 的程序来大致了解图像 API。它指出heightwidth是图像的渲染高度/宽度,naturalHeightnaturalWidth图像的固有高度/宽度(仅适用于 HTML5)。

我从一个高度为 300、宽度为 400 的文件中使用了一张美丽蝴蝶的图像。这个 Javascript:

var img = document.getElementById("img1");

console.log(img.height,           img.width);
console.log(img.naturalHeight,    img.naturalWidth);
console.log($("#img1").height(),  $("#img1").width());

然后我使用了这个 HTML,内联 CSS 用于高度和宽度。

<img style="height:120px;width:150px;" id="img1" src="img/Butterfly.jpg" />

结果:

/*Image Element*/ height == 300         width == 400
           naturalHeight == 300  naturalWidth == 400
/*Jquery*/      height() == 120       width() == 150

/*Actual Rendered size*/    120                  150

然后我将 HTML 更改为以下内容:

<img height="90" width="115" id="img1" src="img/Butterfly.jpg" />

即使用高度和宽度属性而不是内联样式

结果:

/*Image Element*/ height ==  90         width == 115
           naturalHeight == 300  naturalWidth == 400
/*Jquery*/      height() ==  90       width() == 115

/*Actual Rendered size*/     90                  115

然后我将 HTML 更改为以下内容:

<img height="90" width="115" style="height:120px;width:150px;" id="img1" src="img/Butterfly.jpg" />

即同时使用属性和 CSS,看看哪个优先。

结果:

/*Image Element*/ height ==  90         width == 115
           naturalHeight == 300  naturalWidth == 400
/*Jquery*/      height() == 120       width() == 150

/*Actual Rendered size*/    120                  150