需要解决的问题有:本地图片如何在上传前预览、编辑;
最近发现这个功能很多是基于flash实现的,很多JavaScript实现的代码兼容性都很差,特别是在IE和firefox和chrome三个浏览器上不兼容。
代码实现主要利用到jquery插件imgAreaSelect,FileReader对象(chrome和ff获取本地图片数据的接口),IE滤镜效果。
关键词:imgAreaSelect FileReaderdocument.selection.createRange() IE滤镜效果
一、实现上传前预览
1.1、页面显示
代码1-1显示的是html需要展示的web页面信息
03 |
< img id = "biuuu" src = "#" title = "biuuu" > |
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 > |
代码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({ |
10 |
keys: { arrows: 1,ctrl: 5, shift: 'resize' }, |
12 |
onSelectChange:preview |
代码1-2
代码1-2主要是设置需要编辑图片的一些插件属性,具体查看插件的参量说明。
首先我们需要创建一个预览小图片在img之后
1 |
$( '<div><imgid="view" src=' +atvatarUrl+ ' style="position: relative;"/></div>' ) |
8 |
}).insertAfter( '#biuuu' ); |
代码1-3
代码1-3是创建一个小预览图片在img之后
1.3、实现在线预览功能
01 |
function previewImage(file) |
03 |
var porImg = $( '#biuuu' ), |
06 |
if (file[ "files" ] && file[ "files" ][0]) |
09 |
var reader = newFileReader(); |
10 |
reader.onload = function (evt){ |
11 |
porImg.attr({src :evt.target.result}); |
12 |
viewImg.attr({src: evt.target.result}); |
14 |
reader.readAsDataURL(file.files[0]); |
17 |
function previewImage(file) |
19 |
var porImg = $( '#biuuu' ), |
22 |
if (file[ "files" ] && file[ "files" ][0]) |
25 |
var reader = newFileReader(); |
26 |
reader.onload = function (evt){ |
27 |
porImg.attr({src :evt.target.result}); |
28 |
viewImg.attr({src: evt.target.result}); |
30 |
reader.readAsDataURL(file.files[0]); |
36 |
var ieImageDom =document.createElement( "div" ); |
37 |
var proIeImageDom =document.createElement( "div" ); |
45 |
}).attr({ "id" : "view" }); |
46 |
$(proIeImageDom).attr({ "id" : "biuuu" }); |
48 |
porImg.parent().prepend(proIeImageDom); |
50 |
viewImg.parent().append(ieImageDom); |
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 + "\")" }); |
这样就可以实现一个图片的在线编辑以及上传在预览功能。
要注意,代码必须要使用客户端访问,例如:http://loacalhost/imgpreview/index.html,不要直接点击index.html访问
代码下载
转自:http://blog.csdn.net/danhuang2012/article/details/7703606