WSHで画像サイズを取得

WSHで画像サイズを取得したいがそんなメソッド当然ない。ブラウザなら画像本来のサイズを表すプロパティであるnaturalWidthとnaturalHeightというのを使って出来るそうな。よしこれを応用してやってみよう。

document = new ActiveXObject("htmlfile");
document.write("<html><head></head><body id='content'></body></html>");
var img = document.createElement("img");
img.src = path;
img.id = "image";
document.getElementById("content").appendChild(img);
var imgobj = document.getElementById("image");
alert(imgobj.naturalWidth);

うむ、上手くいかない。naturalWidthはundefinedと言われる。おかしい所は何もないはずだと思うんだけど。よく調べてみるとこのプロパティは古いIEでは動かないらしい。なるほど。では例によってこうしてみよう。

document.write("<html><head><meta http-equiv='X-UA-Compatible' content='IE=edge'></head><body id='content'></body></html>");

よし、undefinedは出なくなった。0が帰ってくるがこれは画像のロードが終わらないうちに読みに行ったからだろう。こんな感じでwaitをかければいいだろう。

var start = new Date();
while (imgobj.naturalWidth==0 && new Date().getTime()-start.getTime()<3000) {
};

これで画像サイズが取得出来る。タイムアウトを3秒にしてみたがたぶんこんなにいらない。めでたしめでたし。