跨浏览器的图片上传预览实现方法

本文介绍了如何实现在不同浏览器上进行本地图片预览的技术方案,包括IE6/7/8、Firefox 3及Opera、Safari和Chrome等浏览器的具体实现方法。

最近项目中要处理图片上传的实时预览,就是用户选择图片后能立即查看图片,而不需要上传服务器,即可提高用户体验,也能节省服务器资源消耗。

因为现在的浏览器安全性比以往都提高了,因此不能直接改写图片的src值来实现,不同的浏览器下实现都不一样。例如IE7/IE8下要用滤镜处理,FF3使用nsIDOMFile接口,至于在opera、safari和chrome下则没有办法实现本地预览,只能通过后台来支持预览。以下为基于jquery的实现。

页面结构如下:

首先取得img和file控件对象。此处省略若干字

1. IE6
IE6下实现比较简单,直接设置img的src属性为file的值即可

  1. img.attr('src', file.val());  

2. IE7/8

IE7/8下不允许直接使用本地路径来显示图片,只能通过滤镜来实现预览效果。
首先创建一个隐藏的div,设置一个滤镜样式,关于AlphaImageLoader滤镜后面再介绍。

  1. filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale);  
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale);

然后加载图片并显示,这里用dom对象来处理。

  1. var pre = div.get(0);   
  2. pre.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = 'file:///'+obj.val().replace(////g,"/");   
  3. pre.style.width = width;   
  4. pre.style.height = height;                 
  5. img.hide();   
  6. div.show();  

3. FF3

FF也是不能通过file控件的value属性获取文件本地路径,而是提供了nsIDOMFile接口,来更好地获取文件数据。

这里可以调用file的getAsDataURL方法获取Data URI数据来显示预览

  1. img.attr('src', file.get(0).files[0].getAsDataURL());             

 

PS 1 关于AlphaImageLoader滤镜

它的作用是在对象容器边界内,在对象的背景和内容之间显示一张图片。
如果载入的是png图片,其透明度会被支持,因此它更多地用来解决png的兼容问题。
详细参考msdn的AlphaImageLoader Filter和“Microsoft.AlphaImageLoader滤镜讲解”。
它包括三个属性:enabled(滤镜是否激活),sizingMethod(图像显示方式)和src(图像路径)。
程序主要使用后面两个属性。

sizingMethod有三种方式:
  - crop:剪切图片以适应对象尺寸;
  - image:默认值。增大或减小对象的尺寸边界以适应图片的尺寸;
  - scale:缩放图片以适应对象的尺寸边界。

预载图片对象_preload,需要获取图片的原始尺寸,所以要用image方式。
而预览图片对象img,则要按设定尺寸显示图片,所以要用scale方式。

而src属性设置的路径还支持本地路径,是实现filter模式的关键所在。
还好滤镜并没有像file控件那样提高安全性,否则ie7/8就没有办法实现本地预览了。

PS 2 关于nsIDOMFile 接口参见firefox中的nsIDOMFile接口一文

PS 3 关于Data URI 参见Data URI 和 MHTML一文

内容概要:本文提出了一种基于非合作博弈理论的居民负荷分层调度模型,并结合双层鲸鱼优化算法(Two-level Whale Optimization Algorithm)进行高效求解,模型与算法均通过Matlab代码实现。研究针对电力系统中居民侧用电负荷的复杂调度问题,引入非合作博弈机制刻画各用户之间的利益竞争关系,实现负荷的分层优化分配;同时设计双层优化架构,上层优化资源配置,下层模拟用户自主决策行为,提升了模型的实用性与合理性。通过智能优化算法求解多层级、非凸非线性的博弈模型,有效提高了调度方案的收敛性与全局寻优能力,适用于现代智能电网中的需求侧管理与能源优化场景。; 适合人群:具备电力系统基础理论知识和Matlab编程能力,从事智能电网、能源优化调度、需求侧管理、博弈论应用等方向的科研人员、高校研究生及工程技术人员。; 使用场景及目标:①应用于居民区电力负荷的分层优化调度系统设计与仿真分析;②为非合作博弈在多主体能源系统建模中的应用提供方法论支持;③利用双层鲸鱼算法解决具有嵌套结构的复杂双层优化问题,提升求解效率与调度方案的可行性。; 阅读建议:建议读者结合提供的Matlab代码深入理解模型构建逻辑与算法实现流程,重点关注博弈模型的效用函数设计、纳什均衡求解思路以及双层优化结构的迭代机制,宜配合实际用电数据开展复现实验以验证模型有效性与鲁棒性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值