需要解决的问题有:本地图片如何在上传前预览、编辑;
最近发现这个功能很多是基于flash实现的,很多JavaScript实现的代码兼容性都很差,特别是在IE和firefox和chrome三个浏览器上不兼容。
代码实现主要利用到jquery插件imgAreaSelect,FileReader对象(chrome和ff获取本地图片数据的接口),IE滤镜效果。

关键词:imgAreaSelect FileReaderdocument.selection.createRange() IE滤镜效果

一、实现上传前预览
1.1、页面显示

代码1-1显示的是html需要展示的web页面信息

01 <!—预览图片显示区域-->
02 <div id=”image_area”>
03 <img id="biuuu"src="#" title="biuuu">
04 </div>
05 <!—图片上传区域-->
06 <div id =”upload_area”>
07 <form name "form1"action =' /person?c=changeAtvatar' enctype 'multipart/form-data'method 'POST'>
08 <input type="file"id="picpath" name="atvatar_image">
09 <a href="javascript:void(0);"class="button"> 上传照片</a>
10 <input type='text'name="path" readonly>
11 <div id = “submit_button”>
12 <a href="javascript:void(0);"class='button'>确认</a>
13 </div>
代码1-1

为了修改input file的按钮名称,我们添加了一段代码,这个在第二节将会详细说明

1 <a href="javascript:void(0);" class="button">上传照片</a>
2 <input type='text'name="path" readonly>

1.2、实现预览在线编辑
这里我们主要使用了一个插件进行图片编辑,如果需要具体查看学习可查看网址
http://odyniec.net/projects/imgareaselect/,使用方法还是很简单方便的。

01 $('#biuuu').imgAreaSelect({
02 aspectRatio:'1:1'//截取比例
03 show:true,
04 resizable:true//是否可调整大小
05 autoHide: false,//选择框选择完毕是否自己取消
06 handles:true,
07 key:true//是否启用键盘,默认为false
08 //x1: 75, y1: 30, x2:225, y2: 180, //需要处理的区域,原始的
09 //x1:左上角x轴坐标 y1:左上角y轴坐标 x2:右下角x轴坐标 y2:右下角y轴坐标
10 keys: { arrows: 1,ctrl: 5, shift: 'resize' }, //调整像素大小
11 //onInit:function(img, selection) { ias.setSelection(100, 50, 250, 150, true);ias.update(); }, //设置初始函数 画出选择框
12 onSelectChange:preview //选框移动时触发的事件
13 //onSelectEnd:function(img, select){alert(select.width)} //选框结束时触发的事件
14 });
代码1-2

代码1-2主要是设置需要编辑图片的一些插件属性,具体查看插件的参量说明。
首先我们需要创建一个预览小图片在img之后

1 $('<div><imgid="view" src='+atvatarUrl+' style="position: relative;"/></div>')
2 .css({
3 float: 'left',
4 position:'relative',
5 overflow:'hidden',
6 width: '100px',
7 height: '100px'
8 }).insertAfter('#biuuu');//把新建元素放到 #biuuu 之后
代码1-3

代码1-3是创建一个小预览图片在img之后

1.3、实现在线预览功能

01 function previewImage(file)
02 {
03 var porImg = $('#biuuu'),//首先获取大图片jquery对象
04 viewImg = $('#view');//小图片jquery对象
05 //判断该浏览器是否为w3c标准,既非IE浏览器
06 if (file["files"] && file["files"][0])
07 {
08 //使用JavaScript的FileReader对象来读取本地数据,并且将数据结果赋值给image的src,具体该对象如何实现的还未深入研究
09 var reader = newFileReader();
10 reader.onload =function(evt){
11 porImg.attr({src :evt.target.result});
12 viewImg.attr({src: evt.target.result});
13 }
14 reader.readAsDataURL(file.files[0]);
15 }
16  
17 function previewImage(file)
18 {
19 var porImg = $('#biuuu'),//首先获取大图片jquery对象
20 viewImg = $('#view');//小图片jquery对象
21 //判断该浏览器是否为w3c标准,既非IE浏览器
22 if (file["files"] && file["files"][0])
23 {
24 //使用JavaScript的FileReader对象来读取本地数据,并且将数据结果赋值给image的src,具体该对象如何实现的还未深入研究
25 var reader = newFileReader();
26 reader.onload =function(evt){
27 porImg.attr({src :evt.target.result});
28 viewImg.attr({src: evt.target.result});
29 }
30 reader.readAsDataURL(file.files[0]);
31 }
32 //如果是IE浏览器,采用滤镜效果,进行显示,但特别注意的是该滤镜效果使用的对象是div对象,并非img对象,因此我们需要将原有的img对象remove同时生成新的div对象,并且赋值相应的class和id
33 else
34 {
35 //创建需要滤镜显示的div的dom对象
36 var ieImageDom =document.createElement("div");
37 var proIeImageDom =document.createElement("div");
38 //设置对象的css属性和原有的img对象属性相同,添加相应的id属性值
39 $(ieImageDom).css({
40 float: 'left',
41 position:'relative',
42 overflow:'hidden',
43 width: '100px',
44 height: '100px'
45 }).attr({"id":"view"});
46 $(proIeImageDom).attr({"id":"biuuu"});
47 //删除原有img对象,append创建div的dom对象
48 porImg.parent().prepend(proIeImageDom);
49 porImg.remove();
50 viewImg.parent().append(ieImageDom);
51 viewImg.remove();
52 //采用滤镜效果生成图片预览
53 file.select();
54 path =document.selection.createRange().text;
55 $(ieImageDom).css({"filter":"progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled='true',sizingMethod='scale',src=\""+ path + "\")"});
56 $(proIeImageDom).css({"filter":"progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled='true',sizingMethod='scale',src=\""+ path + "\")"});
57 // .style.filter ="progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled='true',sizingMethod='scale',src=\""+ path + "\")";//使用滤镜效果
58 }

这样就可以实现一个图片的在线编辑以及上传在预览功能。

要注意,代码必须要使用客户端访问,例如:http://loacalhost/imgpreview/index.html,不要直接点击index.html访问

代码下载

转自:http://blog.csdn.net/danhuang2012/article/details/7703606

JavaScript实现本地图片上传预览功能(兼容IE、chrome、FF)的更多相关文章

  1. 图片上传预览,兼容IE

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. js实现图片上传预览功能,使用base64编码来实现

    实现图片上传的方法有很多,这里我们介绍比较简单的一种,使用base64对图片信息进行编码,然后直接将图片的base64信息存到数据库. 但是对于系统中需要上传的图片较多时并不建议采用这种方式,我们一般 ...

  3. JQ实现图片上传预览功能

    <input type="file" name="img" id="test1"> <img src="&quo ...

  4. jquery实现本地图片上传预览和限流处理

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  5. HTML+Jquery实现多图片上传预览功能

    HTML:使用input的onchange事件,它一改变就触发事件 <p id="p3"> <input name="File" onchan ...

  6. 使用ajax,结合jquery,php实现图片上传预览功能

    大致逻辑:点击页面的file,上传图片到指定的php处理图片的文件,处理完成以后,将图片的连接地址返回,JS控制返回的数据,然后将图片动态的展示出来html代码<label> <im ...

  7. js实现图片上传预览功能,使用base64编码来实现

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  8. 12-tinyMCE文本编辑器+图片上传预览+页面倒计时自动跳转

    文本编辑器插件:1.将tinymce文件夹全部复制到webContent下2.tinymce/js目录下放 jquery等三个js文件3.语言包:tinymce/js/tinymce/langs目录下 ...

  9. html,图片上传预览,input file获取文件等相关操作

    input file常用方法: var obj=document.getElementById("upimage"); var file=obj.files[0];//获取文件数据 ...

随机推荐

  1. Android中使用SoundPool来播放音频

    今天找素材重做FlappyBird时学习了一下怎样为应用设置背景音频,发现通过封装SoundPool类就能够非常好的做到这一点. SoundPool类比較适合播放一些类似游戏音效这样的比較短促并且较小 ...

  2. 使用 jQuery UI 和 jQuery 插件构建更好的 Web 应用程序

    简介: 对于那些使用 JavaScript 和 jQuery 库从桌面应用程序转向 Web 应用程序的开发人员来说,他们还不习惯去考虑应用程序基本的外观,因为这些以前都是由操作系统来处理的.了解 jQ ...

  3. 20 款免费的 JavaScript 游戏引擎

    使用 HTML5,CSS3 和 Javascript 可以帮助面向对象开发者开发拥有各种特性的游戏,比如:3D 动画效果,Canvas,数学,颜色,声音,WebGL 等等.最明显的优势在于使用 HTM ...

  4. MapReduce初探

    转自 :http://blog.itpub.net/28912557/viewspace-1127423/ Map-Reduce处理过程(分析气象数据的map-reduce过程)1,调用标准的inpu ...

  5. php 删除目录

    <?php /* 自定义的删除函数,可以删除文件和递归删除文件夹 */ function my_del($path)//自定义my_del函数,函数有一个参数($path).当调用my_del( ...

  6. tomcat安装不成功.提示:failed to install tomcat6 service ,check your setting and permissions

    这个问题主要是因为旧版本卸载不完全导致的,可通过彻底删除旧版本解决,方案如下: 以管理员身份运行 命令提示符,弹出窗口 ,选择“是”,输入 sc delete tomcat5 ,或者 sc delet ...

  7. 优矿众包对冲基金计划”优选策略---100w实盘资金管理权!!

    https://uqer.io/contest/ http://www.cnblogs.com/dunitian/p/4939369.html 优连

  8. LR通用的性能分析流程

    Step1:从分析Summary的事务执行情况入手Summary主要是判定事务的响应时间与执行情况是否合理.如果发现问题,则需要做进一步分析.通常情况下,如果事务执行情况失败或响应时间过长等,都需要做 ...

  9. Unity3D工程源码目录

    2-0    暗黑破坏神3 链接:http://pan.baidu.com/s/1dEAUZoX 密码:cly4 2-1    炉石传说 客户端加服务器端 链接:http://pan.baidu.co ...

  10. Visual Basic的未来之路

        Green首先列出了当时使用VB进行开发的四个基础指导原则:         1.VB和C#共享的通用IDE和平台构建块.         2.共享的“多范式.面向对象.命令式.强类型等”语言 ...