确定图像跨浏览器的原始大小?

Pek*_*ica 87 javascript image

是否有一种可靠的,独立于框架的方法来确定<img src='xyz.jpg'>客户端调整大小的物理尺寸?

Gab*_*ams 126

你有2个选择:

选项1:

删除widthheight属性并阅读offsetWidthoffsetHeight

选项2:

创建一个JavaScript Image对象,设置src和读取widthheight(你甚至不必将它添加到页面来执行此操作).

function getImgSize(imgSrc) {
    var newImg = new Image();

    newImg.onload = function() {
      var height = newImg.height;
      var width = newImg.width;
      alert ('The image size is '+width+'*'+height);
    }

    newImg.src = imgSrc; // this must be done AFTER setting onload
}
Run Code Online (Sandbox Code Playgroud)

由Pekka编辑:根据评论中的约定,我将函数更改为在图像的'onload'事件上运行.否则,对于大图像,由于图像尚未加载height,width因此不会返回任何内容.

  • @Gabriel,我正在使用它,但使用`newImg.onload`函数来确保在设置宽度/高度时加载图像.你能和我一起编辑你的答案吗? (11认同)
  • @GabrielMcAdams,如果在函数末尾添加`if(newImg.complete || newImg.readyState === 4)newImg.onload();`它将修复Chrome/OSX上导致onload无法触发的问题从缓存加载图像时. (5认同)
  • 请注意:Chrome/OSX可能会出现缓存图像问题,使用此技术可获得高度/宽度为0的图像. (2认同)
  • 我怎么得到回报和宽度......?因为那些变量没有超出onload (2认同)

Bug*_*ter 92

图像(至少在Firefox上)具有naturalWidth/ height属性,因此您可以使用它img.naturalWidth来获取原始宽度

var img = document.getElementsByTagName("img")[0];
img.onload=function(){
    console.log("Width",img.naturalWidth);
    console.log("Height",img.naturalHeight);
}
Run Code Online (Sandbox Code Playgroud)

资源

  • 适用于Chrome (8认同)
  • 这个主题在2013年仍然具有相关性.这里是IE7/8的一个很好的解决方法的链接:http://www.jacklmoore.com/notes/naturalwidth-and-naturalheight-in-ie/ (4认同)
  • 这是 2018 年的获胜答案。适用于任何地方。(根据 [浏览器兼容性表](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement#Browser_compatibility)在 MDN。) (4认同)