現在Monacaを使ってアプリを開発しております。
アプリの中で画像のオリジナルサイズを取得したいと思い、以下のコードにて試していますが、正しい画像サイズを取得できません。
JAVAScript
1 2var array = ['image01.jpg', 'image02.jpg', 'image03.jpg']; 3 4for (var i = 0; i < array.length; i++) { 5 6 var path = array[i]; 7 var image = new Image(); 8 9 image.onload = function () { 10 var imageWidth = image.width ; 11 var imageHeight = image.height ; 12 } 13 14 image.src = path; 15 16 alert(imageWidth + 'x' + imageHeight); 17}
実際の画像サイズは2000x1500pxであるにもかかわらず、上記コードを用いて取得した結果は1124x1999pxとなり、画角も異なります(この値は画像によって異なります)。
iPhoneで動作確認を行っているのですが、iPhoneの画面画角に変形されているようにも思えますが、これも画像によって異なります。正しい画像サイズを取得できる方法お分かりの方いらっしゃいましたらよろしくお願いいたします。
コードを書くにあたって参考にしたページはこちらです。
https://lab.syncer.jp/Web/JavaScript/Snippet/35/
追記
上記コードになる前に書いていたのが下記のコードです。
上記コードでは省いておりましたが、一連の画像を読み込む前に、別の画像(下記 画像A=「image_A.jpg」)を読み込んでおり、その次に上記コードと同じくfor文で画像(画像B=「image_B1〜B3.jpg」)を読み込んでいます。
画像Aは正しく読み込んで画像サイズを取得するのですが、その次の画像Bに関しては画像サイズが0となって正しく取得できません。
画像Bの方の変数名を変更しても同様で、同じようなコードなのになぜ画像Aが正しく読み込め、画像Bが正しく読めないのか分かりません。画像を何らか先に読み込む必要があるのか?と思い、調べて試してみたのが先に投稿しました上記のコードとなります。
Javascript
1// 画像Aの読み込み----------------------------------------------------------------------- 2 3var image = new Image(); 4 image.src = 'image_A.jpg'; 5var imageWidth = image.width; 6var imageHeight = image.height; 7 8alert(imageWidth + 'x' + imageHeight); // ←「2000x1500」など、正しい画像サイズを取得できる 9 10 11// 画像B1〜B3の読み込み------------------------------------------------------------------ 12 13var array = ['image_B1.jpg', 'image_B2.jpg', 'image_B3.jpg']; 14 15for (var j = 0; j < array.length; j++) { 16 17 var image = new Image(); // ←変数名を上と変えて「image2」としても「0」を取得します 18 image.src = array[j]; 19 var imageWidth = image.width; 20 var imageHeight = image.height; 21 22 alert(imageWidth + 'x' + imageHeight); // ←結果は「0x0」と画像サイズを取得できない 23 24} 25
追記2
先のコードを調整してみました。実際にはこれをfor文で囲み、複数画像を順繰りと舐めて画像サイズを取得したいと考えております。
JavaScript
1var image = new Image(); 2 image.src = 'image.jpg'; 3 image.onload = function (){ // 引数に「image」を入れても同じ 4 var imageWidth = image.naturalWidth; 5 var imageHeight = image.naturalHeight; 6 alert(imageWidth + 'x' + imageHeight); 7 } 8
回答5件
あなたの回答
tips
プレビュー