teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

コード例追加

2017/01/10 05:13

投稿

退会済みユーザー
answer CHANGED
@@ -1,3 +1,75 @@
1
1
  うまくいかないのは、width を取得しようとしている時点では、画像データの読み込みが完了してないからでしょう。
2
2
 
3
- src に設定した画像データの読み込みが完了すると、image.onload イベントが発生するので、そのハンドラで処置を行うとうまくいくと思います。
3
+ src に設定した画像データの読み込みが完了すると、image.onload イベントが発生するので、そのハンドラで処置を行うとうまくいくと思います。
4
+
5
+ ********* 2017/1/10 14:15 追記 *********
6
+
7
+ 2017/01/10 14:08 の私のコメントで書きましたようにコード例をアップしておきます。コピペすれば動くはずなのでお試しください。これと質問者さんのやりらいことが違う場合は、どこだどのように違うか具体的に書いてください。
8
+
9
+ ```
10
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
11
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
12
+
13
+ <html xmlns="http://www.w3.org/1999/xhtml">
14
+ <head>
15
+ <title></title>
16
+ <script src="/Scripts/jquery-1.8.3.js" type="text/javascript"></script>
17
+ <script type="text/javascript">
18
+ //<![CDATA[
19
+ // HTML5 File API の FileReader を利用して <input type="file"... /> で選択
20
+ // された画像ファイルを読み込み、その画像の Data url 形式文字列を取得。
21
+ // それを image オブジェクトの src 属性に設定する。その際 image.onload イベ
22
+ // ントが発生するのでそのイベントにリスナをアタッチ。そのリスナの中で image
23
+ // オブジェクトが保持する画像のサイズを取得する。
24
+
25
+ // 以下の 3 行はそのための準備
26
+ var fileReader;
27
+ var image = new Image();
28
+ image.onload = DrawImageOnCanvas;
29
+
30
+ // document の読み込み完了後に { } 内の処置を行う
31
+ $(function () {
32
+ // ブラウザの HTML5 File API サポートを確認
33
+ if (window.File && window.FileReader && window.FileList) {
34
+ fileReader = new FileReader();
35
+
36
+ // FileReader オブジェクトに画像を読み込むメソッド readAsDataURL は
37
+ // 非同期で動くので、読み込み完了のイベント onloadend を待って、その
38
+ // リスナで FileReader から Data url を取得し image オブジェクトの
39
+ // src 属性に設定する。
40
+ fileReader.onloadend = function () {
41
+ image.src = fileReader.result;
42
+ };
43
+
44
+ // <input type="file"... /> でファイルの選択が完了すると change
45
+ // イベントが発生するのでそれにリスナをアタッチし処置を行う。
46
+ $("#fileupload").change(function () {
47
+ var fileUpload = document.getElementById("fileupload");
48
+
49
+ // fileReader オブジェクトに <input type="file"... /> で選択
50
+ // された画像ファイルを読み込む
51
+ fileReader.readAsDataURL(fileUpload.files[0]);
52
+ });
53
+ } else {
54
+ $('#result').text('File API がサポートされてません。');
55
+ }
56
+ });
57
+
58
+ // 上で定義した image オブジェクトの src 属性に Data url が設定されると発生
59
+ // する onload イベントのリスナ
60
+ function DrawImageOnCanvas() {
61
+ // オリジナル画像のサイズ
62
+ var w = image.width;
63
+ var h = image.height;
64
+
65
+ $('#result').text('width: ' + w + ', height: ' + h);
66
+ }
67
+ //]]>
68
+ </script>
69
+ </head>
70
+ <body>
71
+ <input id="fileupload" type="file" />
72
+ <div id="result"></div>
73
+ </body>
74
+ </html>
75
+ ```