2 var X_Util_Image_actualSize = {};
\r
5 * ユーティリティ関数とユーティリティクラス
\r
6 * @namespace X.Util.Image
\r
8 X[ 'Util' ][ 'Image' ] = {
\r
9 'getActualDimension' : X_Util_Image_getActualDimension
\r
11 // Alpha Image, data uri ong ...
\r
15 * Opacity不可 NetFront3.4
\r
19 * <p>画像の実際のサイズを返します。
\r
22 * <p> AUTHOR: uupaa.js@gmail.com
\r
23 * @alias X.Util.Image.getActualDimension
\r
24 * @param {Node|ImageElement|string}
\r
25 * @return {array.<number>}
\r
27 function X_Util_Image_getActualDimension( XnodeOrImageElemOrSrc ){
\r
28 var xnode, img, remove, ret, run, memW, memH, w, h;
\r
30 if( X_Type_isString( XnodeOrImageElemOrSrc ) ){
\r
31 if( ret = X_Util_Image_actualSize[ X_URL_toAbsolutePath( XnodeOrImageElemOrSrc ) ] ) return ret;
\r
33 xnode = X_Node_systemNode[ 'create' ](
\r
36 src : XnodeOrImageElemOrSrc
\r
39 position : 'absolute'
\r
42 X_Node_startUpdate();
\r
43 img = X_UA_DOM.IE4 ? X_Node__ie4getRawNode( xnode ) : xnode[ '_rawObject' ];
\r
46 if( XnodeOrImageElemOrSrc.constructor === Node ){
\r
47 xnode = XnodeOrImageElemOrSrc;
\r
48 img = X_UA_DOM.IE4 ? X_Node__ie4getRawNode( xnode )[ '_rawObject' ] : xnode[ '_rawObject' ];
\r
50 if( X_Type_isHTMLElement( XnodeOrImageElemOrSrc ) ){
\r
51 img = XnodeOrImageElemOrSrc;
\r
53 if( XnodeOrImageElemOrSrc.constructor === X_EventDispatcher && X_Type_isImage( XnodeOrImageElemOrSrc[ '_rawObject' ] ) ){
\r
54 xnode = XnodeOrImageElemOrSrc;
\r
55 img = xnode[ '_rawObject' ];
\r
59 if( ret = X_Util_Image_actualSize[ img.src ] ) return ret;
\r
62 // for Firefox, Safari, Google Chrome
\r
63 if( img.naturalWidth ) return [ img.naturalWidth, img.naturalHeight ];
\r
65 if( 5 <= X_UA[ 'IE' ] ){// for IE
\r
66 run = img.runtimeStyle;
\r
70 // keep runtimeStyle
\r
73 run.height = 'auto';
\r
79 } else {// for Opera and Other
\r
81 memW = w = img.width;
\r
82 memH = h = img.height;
\r
84 if( img.removeAttribute ){ // Safari1.3 の Image は removeAttribute がない
\r
85 // keep current style
\r
86 img.removeAttribute( 'width' );
\r
87 img.removeAttribute( 'height' );
\r
98 ret = X_Util_Image_actualSize[ img.src ] = [ w, h ];
\r
100 remove && xnode[ 'kill' ]();
\r