2011-03-02 8 views
11

私はこのスクリプトを持っています。ブラウザのアップロードされたイメージの幅と高さを取得するために使用されています。HTML5 - イメージのサイズを取得する方法

参照:http://renevier.net/misc/resizeimg.html

function createReader(file) { 
    reader.onload = function(evt) { 
     var image = new Image(); 
     image.onload = function(evt) { 
      var width = this.width; 
      var height = this.height; 
      alert (width); // will produce something like 198 
     }; 
     image.src = evt.target.result; 
    }; 
    reader.readAsDataURL(file); 
} 

for (var i = 0, length = input.files.length; i < length; i++) { 
    createReader(input.files[i]); 
} 

私はcreateReader機能外部から値の幅と高さにアクセスしたいです。どうやってやるの?

+1

um ... 'createReader'が何かを返すようにします。それは良いスタートです。 –

+0

varの幅と高さはimage.onload関数内でしかアクセスできません。そのため、私は何かを返すことができませんでした。 –

+0

変数 'width'と 'height'を返すスコープに作成できません例えば ​​'createReader'関数のようなものですか? –

答えて

26

変更「createReader」あなたは画像が利用可能なときに呼び出されるハンドラ関数に渡すように:

function createReader(file, whenReady) { 
    reader.onload = function(evt) { 
     var image = new Image(); 
     image.onload = function(evt) { 
      var width = this.width; 
      var height = this.height; 
      if (whenReady) whenReady(width, height); 
     }; 
     image.src = evt.target.result; 
    }; 
    reader.readAsDataURL(file); 
} 

あなたがそれを呼び出すときに今、あなたはそれがあなたであるものは何でもする機能に渡すことができます

createReader(input.files[i], function(w, h) { 
    alert("Hi the width is " + w + " and the height is " + h); 
    }); 
+0

幻想的な答え。私は10のアップフォートを与えることができれば、私は!! whenReadは本当に私を助けました。なぜ、時々高さの検索がうまくいったのか、時にはそれがうまくいかないのか分からなかったからです。 whenReady型ハンドラの使用方法についての詳しい説明。そして、なぜFile APIを使用してファイルを読むにはこのファイルが必要ですか? –

+1

@kimsiaよくあるようなAPIの多くは**非同期です** - あなたがそれらを呼び出すと、一連のイベントが動いていますが、すべてが即座に発生するわけではありません。 「コールバック」メカニズムを使用すると、長期的な操作が完了したときに実行されるコードを配置することができます。ネットワーク操作、ファイルシステムのやりとり、その他のようなものは、即時ではないハードウェアの現実を伴うため、非同期です。 – Pointy

関連する問題