图片仅提供一个路径,如:http://localhost:8080/hldjk/img/testImg/a3.JPG
这张图片我要先求得它的长、宽,再根据我的要求(比例)来计算我将要显示的小。
之前的实现方案(有点问题):
<script language="JavaScript"> 
function widHeight() {
       var myImage = new Image(); 
       myImage.src = "http://localhost:8080/hldjk/img/testImg/a3.JPG"; 
       alert("myImage.width" + myImage.width);
       alert(myImage.height);
}
</script>
<body>
<a href="#" onClick="widHeight()">Width</a>
<img src="http://localhost:8080/hldjk/img/testImg/a3.JPG" style="display:'none'">
</body> 现在的问题是:alert("myImage.width" + myImage.width); 总显示为0;
这张图片第一次调用的时候者是0,以后调用都不会是0。为什么会存在这样的问题?这个问题怎么解决呢?
Image是个什么对象?
如果用java 来读取这个文件长、宽是否可行?

解决方案 »

  1.   

    我这里不会出现这种情况,第一次调用就会有值。用java来读取应该也是可行的
    <%@page language="java" contentType="text/html;charset=gb2312" %>
    <%@ page import="javax.imageio.ImageIO " %>
    <%@ page import="javax.awt.Image" %>
    <html>
    <head>
    </head>
    <body>
    <% 
       Image img = ImageIO.read(图片路径);
       int width=img.getWidth();
       int height=img.getHeight();
    %>
    </body>
    </html>
      

  2.   


    <%@page language="java" contentType="text/html;charset=gb2312" %>
    <%@ page import="javax.imageio.ImageIO " %>
    <%@ page import="javax.awt.Image" %>
    <html>
    <head>
    </head>
    <body><% 
       Image img = ImageIO.read("http://localhost:8080/hldjk/img/testImg/a3.JPG");
       int width=img.getWidth();
       int height=img.getHeight();
    %>
    a href="#" onClick="widHeight()">Width</a>
    <img src="http://localhost:8080/hldjk/img/testImg/a3.JPG" style="display:'none'">
    </body>
    <script>
    function widHeight() {
      var width='<%=width%>';
      var height='<%=height%>';
      alert(width);
      alert(height);}
    </script>
    </html>
      

  3.   

    楼主你提供的代码是你测试的代码么?
    我觉得你这方法可行,用你的代码在IE6及火狐下测试都是可以的,最初的0是由于本地还无那个图片alert("myImage.width" + myImage.width);这个会触发它去服务器下载那个图片,以后本地有缓存了直接有那个图片了所以不会出现0,但你通过<img src="http://localhost:8080/hldjk/img/testImg/a3.JPG" style="display:'none'">这个间接加载了,应该没问题
      

  4.   

    这就是我正在测试的代码呀。图片路径如果是本地图片就不会出现这种问题,但是把图片放在tomcat 下面就有这个问题了。很奇怪,只要在myImage.src = "http://localhost:8080/hldjk/img/testImg/a3.JPG"; 
    后面暂停5毫秒就可以了。pause(5);.......function pause(numberMillis) {
        var dialogScript = 
           'window.setTimeout(' +
           ' function () { window.close(); }, ' + numberMillis + ');';
        var result =  window.showModalDialog(
           'javascript:document.writeln(' +
            '"<script>' + dialogScript + '<' + '/script>")'); 
    }
      

  5.   


    我想是因为myImage.src = "http://localhost:8080/hldjk/img/testImg/a3.JPG"; 这个语句会触发后台下载图片,而执行alert("myImage.width" + myImage.width);alert(myImage.height);时可能图片还没下载完成造成显示宽度和高度为0。你可以控制让图片下载完成再显示宽度和高度嘛,只要在myImage.src前加myImage.onload=function(){alert("myImage.width" + myImage.width);       alert(myImage.height);};
      

  6.   

    但是调用这个pause函数,我总觉得会有问题。不一定要alert("myImage.width" + myImage.width);这样了访问一下这个图片,
    哪怕是alert('kkkkk');
    然后再alert("myImage.width" + myImage.width);//这里也是因为前面alert('kkkkk');所以不会是0var myImage = new Image(); //这个东西不好用,API里面就这点东西,看也看不懂:
    The following is the minimum code needed to produce an image.   <v:image
       src="..\art\zip.gif"
       style="position:relative;top:1;left:1;width:50;height:50">
       </v:image>
      

  7.   

    我这里的测试结果,win7,ie8:
    最开始的时候都是0,0
    以后测试的都是28,30非常的法克。
      

  8.   


    说中了核心,问题得以解决。
    myImage.onload=function(){
        //在此处理所以剩下的业务
    }