载入中,请稍候……

预览将上传的本地图片

Admin 于 2008-09-23 06:58:03 发表JavaScript

订阅: http://www.miniboke.com/Feed/Article_49.aspx
引用: http://www.miniboke.com/Trackback/eilaHpNVhffDxmjpdBPM.aspx (UTF-8)
C++位操作介绍 < 预览将上传的本地图片 > vc编程常用小技巧

在项目中,有上传本地图片先预览的功能。原先在本机IE6,IE7浏览器中可正常预览的功能,但在将项目布暑到远程服务器的时候,在IE7中不能预览了。此问题,在之前同事的IE7访问我机子预览时也出现过,当时没在意,认为系统不会有问题。

今天,上网找了许久,终于知道了,这原来是IE7中加强了安全限制。通过http访问的页面默认是没有访问用户本机图片文件的权限的,所以通过 javascript获取不了本机的图片路径等相关信息。网上也有几种解决方案,一种是通过利用style 的"DXImageTransform.Microsoft.AlphaImageLoader" 滤镜来实现,而另一种,则是设置当前站点为安全站点即可。

由于,预览还涉及到图片旋转等,利用"DXImageTransform.Microsoft.AlphaImageLoader"方式,确不知道该如何旋转此滤镜中的图片,故暂时决定采用设置安全性方式,有劳用户了。

一些莫名其妙的错误都是有源头的。

收集的资料贴出来:

在IE6.0中,用户可以在javascript中或许最终用户本地图片的长宽:

  1. <Script language=Javascript>
  2. function getLocalImageInfo( imgUrl )
  3. {
  4. var objImg = new Image();
  5. objImg.src = imgUrl;
  6. alert( objImg.width ) //the width of the local image
  7. alert( objImg.height ) //the height of the local image
  8. }
  9. //调用如下
  10. getLocalImageInfo("file://c:\1.jpg");
  11. </Script>

并且,在IE6.0中,在客户端本地上传图片前可以通过Javascript/html预览要上传的图片,并获取图片的文件大小:


  1. <html>
  2. <head>
  3. <title>Upload file</title>
  4. </head>
  5. <body>
  6. <input type="file" onchange="javascript:previewImage(this.value)" >
  7. <img id="img" />
  8. <script language="javascrtip">
  9. function previewImage( imgUrl )
  10. {
  11. var objImg = document.getElementById("img");
  12. objImg.src = imgUrl;
  13. alert( "the size of the image file:" + objImg.fileSize )
  14. }
  15. </script>
  16. </body>
  17. </html>

Note: 上面的代码最好在img图片加载完毕后再取图片的大小,例如:objImg.onreadystatechange()=function{ if(objImg.readystate=="complete")............}

 

当在IE7中,如果上述代码放在客户机本机(以html的形式放在客户机器上,而不是放在IIS中通过http访问)以文件方式打开时仍然能实现IE6中的功能,但如果上述代码放在IIS中,用IE7 通过HTTP协议访问则不能正常工作。

 

经过查找资料才发现IE7在安全性方面做了提升,通过http访问的页面默认是没有访问用户本机图片文件的权 限的,所以通过javascript获取不了本机的图片长宽,也不能将本机图片地址赋值给<img>对象。如果将所访问的站点放入"可信站 点"列表中(IE7->工具->Internet选项->安全->可信站点),则可以如IE6一样正常工作。

 

如果不想通过客户将本站点设置为"可信"站点的方式来实现上传图片的预览及获取图片长宽信息,则可以利用style的"DXImageTransform.Microsoft.AlphaImageLoader" 滤镜来实现:


  1. <html >
  2. <head id="Head1" runat="server">
  3. <title>Untitled Page</title>
  4. <script language=javascript>
  5. function setImagePreview( fileUrl )
  6. {
  7. var objDivFilter = document.getElementById("divFilter")
  8. if( fileUrl )
  9. {
  10. objDivFilter.style.width = "400px";
  11. objDivFilter.style.height = "400px"; //这个设置初始大小是必须的
  12. objDivFilter.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod = image)";
  13. objDivFilter.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = fileUrl;
  14. // get width and height
  15. alert( objDivFilter.offsetWidth)
  16. alert( objDivFilter.offsetHeight)
  17. }
  18. }
  19. </script>
  20. </head>
  21. <body>
  22. <form id="form1" runat="server">
  23. <div>
  24. <asp:FileUpload ID="txtFile" runat="server" Width="508px" onchange="javascript:setImagePreview( this.value );" />
  25. <br />
  26. <div id="divFilter" />
  27. </div>
  28. </form>
  29. </body>

    但上述办法还不能在客户端获取图片文件的大小,我也没有找到很好的解决方案

    另外:在.net中,可以在C#后台代码中获取图片的相应信息,只不过这种方式增加了一些不必要的网络传输过程,有一定的性能代价。

  30. 资料二:

  31. 本地图片预览代码(支持 IE6、IE7)

    在 IE6 中,可以很方便地利用 img 的 src 属性,实现本地图片预览,然而在 IE7 中,这种办法却行不通。需要用 AlphaImageLoader


    AlphaImageLoader

    说明:

    在对象容器边界内,在对象的背景和内容之间显示一张图片。并提供对此图片的剪切和改变尺寸的操作。如果载入的是PNG(Portable Network Graphics)格式,则0%-100%的透明度也被提供。

    语法:

    filter : progid:DXImageTransform.Microsoft.AlphaImageLoader ( enabled=bEnabled , sizingMethod=sSize , src=sURL )

    enabled:可选项。布尔值(Boolean)。设置或检索滤镜是否激活。
    true:默认值。滤镜激活。
    false:滤镜被禁止。

    sizingMethod:可选项。字符串(String)。设置或检索滤镜作用的对象的图片在对象容器边界内的显示方式。
    crop:剪切图片以适应对象尺寸。
    image:默认值。增大或减小对象的尺寸边界以适应图片的尺寸。
    scale:缩放图片以适应对象的尺寸边界。

    src:必选项。字符串(String)。使用绝对或相对 url 地址指定背景图像。假如忽略此参数,滤镜将不会作用。


    具体操作:

    1. 为预览区域(比如要在某个 div 中预览)添加样式:filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale);。
    2. 为 AlphaImageLoader 设置 src 属性。

    示例代码:


    [Ctrl+A 全部选择 提示:您可先修改部分代码,再按运行]

    相关阅读:http://www.cftea.com/products/ 很好的学习地方

被阅560次, 0投一票
  • 看完了要说点啥么?
  • 昵称 (不填说不了话)
  • 信箱地址 (不会被公开,但是不填也说不了话)
  • 网址 (这个不填也成)

Powered by MiniBoke v2.0.0.8 Build 0828

Copyright © 2008 迷你博客. All rights reserved.

粤ICP备07500939号