从url获取远程图像的宽度高度

Won*_*nka 64 javascript height image width

因此警报给出了宽度和高度的未定义值.我认为来自img.onload计算的图像的w和h值没有被传递给要返回的值,或者它可能在onload计算它们之前返回w和h :

function getMeta(url){
 var w; var h;
 var img=new Image;
 img.src=url;
 img.onload=function(){w=this.width; h=this.height;};
 return {w:w,h:h}    
}

// "http://snook.ca/files/mootools_83_snookca.png" //1024x678
// "http://shijitht.files.wordpress.com/2010/08/github.png" //128x128

var end = getMeta("http://shijitht.files.wordpress.com/2010/08/github.png");
var w = end.w;
var h = end.h;
alert(w+'width'+h+'height');
Run Code Online (Sandbox Code Playgroud)

如何让警报显示正确的宽度和高度?

http://jsfiddle.net/YtqXk/

Rok*_*jan 109

使用jQuery获取图像大小

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

使用JavaScript获取图像大小

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

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

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

使用以上简单如下: getMeta( "http://example.com/img.jpg" );

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

  • 由于宽度和高度没有被返回,我怎样才能让它们返回到函数之外使用? (3认同)
  • @Wonka不是没有在`.load`函数中调用某个函数---或者是setInterval,导致代码被重新执行并执行时,图像仍在加载:Interval会检查图像是否加载并自动清除它这个演示:http://jsfiddle.net/roXon/SN2t6/1/ (3认同)
  • @Wonka 在这里查看**加载图像后立即调用函数:** http://jsfiddle.net/roXon/SN2t6/4/ (2认同)

fey*_*chu 20

只需将回调作为参数传递,如下所示:

function getMeta(url, callback) {
    var img = new Image();
    img.src = url;
    img.onload = function() { callback(this.width, this.height); }
}
getMeta(
  "http://snook.ca/files/mootools_83_snookca.png",
  function(width, height) { alert(width + 'px ' + height + 'px') }
);
Run Code Online (Sandbox Code Playgroud)


Pan*_*agi 10

函数中的wh变量与img.onload函数中的变量不在同一范围内getMeta().一种方法,如下:

小提琴:http://jsfiddle.net/ppanagi/28UES/2/

function getMeta(varA, varB) {
    if (typeof varB !== 'undefined') {
       alert(varA + ' width ' + varB + ' height');
    } else {
       var img = new Image();
       img.src = varA;
       img.onload = getMeta(this.width, this.height);
    }
}


getMeta("http://snook.ca/files/mootools_83_snookca.png");
Run Code Online (Sandbox Code Playgroud)


Kam*_*ski 5

ES6:使用async/await你可以做下面getMeta的序列,例如单向函数和如下(我加你可以用它(这是你的问题几乎相同的代码await关键字和变化的变量endimg,并改变varlet关键字),您需要运行。getMetaawait仅来自async功能(运行)。

function getMeta(url) {
    return new Promise((resolve, reject) => {
        let img = new Image();
        img.onload = () => resolve(img);
        img.onerror = reject;
        img.src = url;
    });
}

async function run() {

  let img = await getMeta("http://shijitht.files.wordpress.com/2010/08/github.png");

  let w = img.width;
  let h = img.height; 

  size.innerText = w+' width, '+h+' height';
  size.appendChild(img);
}

run();
Run Code Online (Sandbox Code Playgroud)
<div id="size" />
Run Code Online (Sandbox Code Playgroud)