113 lines
2.7 KiB
Java
113 lines
2.7 KiB
Java
function imagepreview(file, view, call) {
|
|
|
|
var maxHeight = view.clientHeight,
|
|
maxWidth = view.clientWidth,
|
|
doc = document;
|
|
|
|
function setsize(info, img){
|
|
var iwidth, iheight;
|
|
if((info.width / maxWidth) > (info.height / maxHeight)){
|
|
iwidth = maxWidth;
|
|
iheight = Math.round(iwidth * info.height / info.width);
|
|
} else {
|
|
iheight = maxHeight;
|
|
iwidth = Math.round(iheight * info.width / info.height);
|
|
}
|
|
with(view.style){
|
|
height = iheight + "px";
|
|
width = iwidth + "px";
|
|
overflow = "hidden";
|
|
}
|
|
if(img){
|
|
with(img.style){
|
|
height = width = "100%";
|
|
}
|
|
view.innerHTML = "";
|
|
view.appendChild(img);
|
|
}
|
|
|
|
}
|
|
|
|
try{
|
|
new FileReader();
|
|
file.addEventListener("change", function(e){
|
|
var image = this.files[0];
|
|
function fireError(){
|
|
var evObj = doc.createEvent('Events');
|
|
evObj.initEvent( 'error', true, false );
|
|
file.dispatchEvent(evObj);
|
|
file.value = "";
|
|
}
|
|
if(!/^image\//.test(image.type)){
|
|
e.stopPropagation();
|
|
e.preventDefault();
|
|
fireError();
|
|
return false;
|
|
}
|
|
var reader = new FileReader(),
|
|
img = new Image();
|
|
reader.onerror = img.onerror = fireError;
|
|
img.onload = function(){
|
|
var info = {
|
|
height: img.height,
|
|
width: img.width,
|
|
name: image.name,
|
|
size: image.size
|
|
};
|
|
if( call(info) !== false ){
|
|
setsize(info, img);
|
|
}
|
|
img.onload = img.onerror = null;
|
|
}
|
|
reader.onload = function (){
|
|
img.src = reader.result;
|
|
}
|
|
reader.readAsDataURL(image);
|
|
|
|
}, false);
|
|
}catch(ex){
|
|
|
|
file.attachEvent("onchange", function() {
|
|
var path = file.value,
|
|
tt = doc.createElement("tt"),
|
|
name = path.slice(path.lastIndexOf("\\") + 1 );
|
|
|
|
if("XMLHttpRequest" in window){
|
|
file.select();
|
|
path = doc.selection.createRange().text,
|
|
doc.selection.empty();
|
|
}
|
|
|
|
function imgloader (mode){
|
|
return "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + path + "', sizingMethod='" + mode + "')";
|
|
}
|
|
(doc.body || doc.documentElement).appendChild(tt);
|
|
with(tt.runtimeStyle){
|
|
filter = imgloader("image");
|
|
zoom = width = height = 1;
|
|
position = "absolute";
|
|
right = "9999em";
|
|
top = "-9999em";
|
|
border = 0;
|
|
}
|
|
var info = {
|
|
height: tt.offsetHeight,
|
|
width: tt.offsetWidth,
|
|
name: name
|
|
};
|
|
if( info.height > 1 || info.width > 1 ){
|
|
if(call(info) !== false ){
|
|
view.style.filter = imgloader("scale");
|
|
setsize(info);
|
|
}
|
|
} else {
|
|
file.fireEvent("onerror");
|
|
event.cancelBubble = true;
|
|
event.returnValue = false;
|
|
this.value = "";
|
|
}
|
|
tt.parentNode.removeChild(tt);
|
|
});
|
|
}
|
|
|
|
} |