JavaScript:获取图像尺寸


Answers:


196
var img = new Image();

img.onload = function(){
  var height = img.height;
  var width = img.width;

  // code here to use the dimensions
}

img.src = url;

1
除非您需要同步获取尺寸。在这种情况下,您只需要将图像插入文档(使用视口外部某处的绝对位置)即可,然后在调用document.appendChild()之后即可使用尺寸。
JustAndrei 2015年

1
为什么onload比设置图片的网址前?
阿杰·高尔

23
@AjayGaur因为onload是一个侦听器,如果正确加载了图像,它将被异步调用。如果您在设置url之后设置了侦听器,则可能会在代码到达设置onload本身之前加载图像,从而导致永远不会调用该侦听器。使用类比,如果您要给自己倒一杯水,是否先倒水,然后再倒入玻璃杯中?还是先放杯子然后倒水?
biomorgoth

2
img.naturalWidth和img.naturalHeight是正确的答案
Kamlesh

谢谢@Kamlesh,我需要自然的尺寸。
jahooma

43

做一个新的 Image

var img = new Image();

设置 src

img.src = your_src

得到widthheight

//img.width
//img.height

17
使用此确切的代码,我的宽度和高度一直保持为0。
亚当·凯西

11
似乎必须加载图像,这是有道理的。
亚当·凯西2012年

3
其他信息-尽管这对我来说是第一次,但它是间歇性的。我认为问题是因为图像尚未下载。我通过运行在onload事件处理程序中使用该维度的代码来进行修复,如下所示:img.onload = function(){};
Shumii 2013年

3
只要图像在浏览器缓存中,此代码就起作用。一旦缓存无效或被删除。它不会工作。所以不是很可靠。
bharatesh '16

2
这是行不通的,因为尚未加载图像-图像加载是异步完成的,因此您必须等待加载事件。
user1702401 '17

5

这将使用该功能并等待其完成。

http://jsfiddle.net/SN2t6/118/

function getMeta(url){
    var r = $.Deferred();

  $('<img/>').attr('src', url).load(function(){
     var s = {w:this.width, h:this.height};
     r.resolve(s)
  });
  return r;
}

getMeta("http://www.google.hr/images/srpr/logo3w.png").done(function(test){
    alert(test.w + ' ' + test.h);
});

1
为什么对重用此可重用功能具有偏见?!
DavidDunham

“仅使用JavaScript”,这就是jQuery,我猜
Apolo

尽管它使用的是jQuerry,但您得到我的好评。方法很重要。
krankuba '19

2

naturalWidth naturalHeight

var img = document.createElement("img");
img.onload = function (event)
{
    console.log("natural:", img.naturalWidth, img.naturalHeight);
    console.log("width,height:", img.width, img.height);
    console.log("offsetW,offsetH:", img.offsetWidth, img.offsetHeight);
}
img.src = "image.jpg";
document.body.appendChild(img);

// css for tests
img { width:50%;height:50%; }

1

如果您有输入表单中的图片文件。你可以这样使用

let images = new Image();
images.onload = () => {
 console.log("Image Size", images.width, images.height)
}
images.onerror = () => result(true);

let fileReader = new FileReader();
fileReader.onload = () => images.src = fileReader.result;
fileReader.onerror = () => result(false);
if (fileTarget) {
   fileReader.readAsDataURL(fileTarget);
}


0

使用jQuery获取图像大小

function getMeta(url){
    $("<img/>",{
        load : function(){
            alert(this.width+' '+this.height);
        },
        src  : url
    });
}

使用JavaScript获取图像大小

function getMeta(url){   
    var img = new Image();
    img.onload = function(){
        alert( this.width+' '+ this.height );
    };
    img.src = url;
}

使用JavaScript获取图像大小(现代浏览器,IE9 +)

function getMeta(url){   
    var img = new Image();
    img.addEventListener("load", function(){
        alert( this.naturalWidth +' '+ this.naturalHeight );
    });
    img.src = url;
}

只需将以上内容用作:getMeta(“ http://example.com/img.jpg ”);

https://developer.mozilla.org/en/docs/Web/API/HTMLImageElement


-3

以下代码将图像属性的高度宽度添加到页面上的每个图像。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Untitled</title>
<script type="text/javascript">
function addImgAttributes()
{
    for( i=0; i < document.images.length; i++)
    { 
        width = document.images[i].width;
        height = document.images[i].height;
        window.document.images[i].setAttribute("width",width);
        window.document.images[i].setAttribute("height",height);

    }
}
</script>
</head>
<body onload="addImgAttributes();">
<img src="2_01.jpg"/>
<img src="2_01.jpg"/>
</body>
</html>

13
问题是关于在不向用户显示图像的情况下获取图像尺寸。在显示图像后设置图像的宽度和高度属性绝对没有意义。
Yaroslav Stavnichiy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.