主要运用到的有jQuery以及其插件Jcrop。
要使用Jcrop要引入jQuery以及Jcrop。
<script src="js/jquery.min.js" type="text/javascript"></script>
<script src="js/jquery.Jcrop.js" type="text/javascript"></script>
具体实现直接贴出来,IE可以直接读取路径显示比较方便,FireFox则要引用HTML5新特性,FileReader的API。
var MAXWIDTH = 330;
var MAXHEIGHT = 230;
var JCROPRATIO = 1;//这个属性主要是确定选择框的横纵比
jQuery(function($){
var jcrop_api;
FileReader = window.FileReader;
$('#avatar').find("img:eq(0)").Jcrop({
aspectRatio: JCROPRATIO,
onChange: showCoords,
onSelect: showCoords,
onRelease: clearCoords
},function(){
jcrop_api = this;
});
$("#file").change(function() {
var image = document.createElement('img');
var width = MAXWIDTH;
var height = MAXHEIGHT;
$("#avatar").css('max-width',MAXWIDTH);
$("#avatar").css('max-height',MAXHEIGHT);
$("#avatar").css('width',MAXWIDTH);
$("#avatar").css('height',MAXHEIGHT);
$("#avatar").css('overflow','hidden');
if(jcrop_api != null) {
jcrop_api.destroy();
}
if (FileReader) {
//FireFox
var reader = new FileReader();
var file = this.files[0];
reader.readAsDataURL(file);
reader.onload = function(e) {
image.src = this.result;
//设置长宽比,延迟0.4秒
//长和宽需要图片完全加载的情况下才能读取,当然也可以通过后台获取
setTimeout(function() {
width = image.width;
height = image.height;
var rat;
if(width > MAXWIDTH) {
rat = MAXWIDTH/width;
width = MAXWIDTH;
height = height*rat;
}
if(height > MAXHEIGHT) {
rat = MAXHEIGHT/height;
height = MAXHEIGHT;
width = width*rat;
}
image.width = width;
image.height = height;
$("#avatar").html(image);
$(image).Jcrop({
aspectRatio: JCROPRATIO,
onChange: showCoords,
onSelect: showCoords,
onRelease: clearCoords
},function(){
jcrop_api = this;
});
},500);//end of set time out
};
reader.onloadend = function(e){
};
} else {
//IE
var path = $(this).val();
image.src = path;
$("#avatar").html(image);
$(image).Jcrop({
aspectRatio: JCROPRATIO,
onChange: showCoords,
onSelect: showCoords,
onRelease: clearCoords
},function(){
jcrop_api = this;
});
//设置长宽比
width = image.width;
height = image.height;
while(width > MAXWIDTH || height > MAXHEIGHT) {
var rat;
if(width > MAXWIDTH) {
rat = MAXWIDTH/width;
width = MAXWIDTH;
height = height*rat;
}
if(height > MAXHEIGHT) {
rat = MAXHEIGHT/height;
height = MAXHEIGHT;
width = width*rat;
}
}
$(image).css('width',width);
$(image).css('height',height);
}
});
});
function showCoords(c){
$('#x1').val(c.x);
$('#y1').val(c.y);
$('#x2').val(c.x2);
$('#y2').val(c.y2);
$('#w').val(c.w);
$('#h').val(c.h);
};
function clearCoords(){
$('#x1').val('');
$('#y1').val('');
$('#x2').val('');
$('#y2').val('');
$('#w').val('');
$('#h').val('');
};
页面如下,其中坐标和长宽可以传到后台根据具体需求运用。
<div><input type="file" id="file" name="file"/></div>
<div id="avatar"><img src="css/blank.png"/></div>
<div>
<label>X1 <input type="text" size="4" id="x1" name="x1" /></label>
<label>Y1 <input type="text" size="4" id="y1" name="y1" /></label>
<label>X2 <input type="text" size="4" id="x2" name="x2" /></label>
<label>Y2 <input type="text" size="4" id="y2" name="y2" /></label>
<label>W <input type="text" size="4" id="w" name="w" /></label>
<label>H <input type="text" size="4" id="h" name="h" /></label>
</div>