246 lines
7.7 KiB
JavaScript
Executable File
246 lines
7.7 KiB
JavaScript
Executable File
|
|
var jQuery = window.jQuery.noConflict(true);
|
|
var dwidth = window.screen.width -20;
|
|
var dheight = data[data.indexOf('height')+1];
|
|
jQuery('#avatardesigner').width(dwidth-40);
|
|
jQuery('#avatardesigner').height(dheight-25);
|
|
jQuery('#widgetparent').width(dwidth-40);
|
|
jQuery('#widgetparent').height(dheight-25);
|
|
jQuery('#selector').width(150);
|
|
jQuery('#selector').height(150);
|
|
jQuery('#avatarfileselector').width(dwidth-40);
|
|
jQuery('#avatarfileselector').height(dheight-25);
|
|
jQuery('#avatarfile').width('100%');
|
|
jQuery('#avatarfile').height(dheight-25);
|
|
|
|
jQuery('#avatarcanvas').attr('width', (dwidth-40));
|
|
jQuery('#avatarcanvas').attr('height', dheight-25);
|
|
jQuery('#avatardisplaycanvas').attr('width', dwidth-40);
|
|
jQuery('#avatardisplaycanvas').attr('height', 400);
|
|
|
|
getID('avatarform').target ='uploadframe';
|
|
getID('avatarfile').onchange = uploadAvatarDone;
|
|
getID('avatarimage').onload = forceSelectorInsideAvatar;
|
|
getID('backfileselection').onclick = showAvatarFileSelector;
|
|
|
|
jQuery(document).ready(function () {
|
|
|
|
});
|
|
|
|
window.addEventListener('message', receiveMessage, false);
|
|
|
|
function receiveMessage(event) {
|
|
var msgdata = event.data;
|
|
if (typeof(msgdata) !== 'string') {
|
|
return;
|
|
}
|
|
}
|
|
|
|
function uploadAvatarDone() {
|
|
if (this.files && this.files[0]) {
|
|
var fr = new FileReader();
|
|
fr.onload = function(e) {
|
|
jQuery('#avatarfileselector').hide();
|
|
jQuery('#avatardisplayer').hide();
|
|
jQuery('#avataradjuster').show();
|
|
jQuery('#avataradjuster2').show();
|
|
|
|
};
|
|
fr.readAsDataURL(this.files[0]);
|
|
}
|
|
}
|
|
|
|
function showAvatarFileSelector() {
|
|
getID('avatarfile').value = null;
|
|
clearAvatar();
|
|
getID('avataradjuster').style.display = 'none';
|
|
getID('avataradjuster2').style.display = 'none';
|
|
getID('avatarfileselector').style.display = 'block';
|
|
}
|
|
|
|
function getAvatarDimension() {
|
|
var factor = 50;
|
|
var cw = jQuery('#widgetparent').width();
|
|
var ch = jQuery('#widgetparent').height();
|
|
var iw = jQuery('#avatarimage').width();
|
|
var ih = jQuery('#avatarimage').height();
|
|
var minw = 48;
|
|
var minh = 48;
|
|
var midw = Math.min(Math.max(iw, 48), cw);
|
|
var midh = Math.min(Math.max(ih, 48), ch);
|
|
var maxw = Math.max(Math.max(iw, 48), cw);
|
|
var maxh = Math.max(Math.max(ih, 48), ch);
|
|
var minr = Math.max(minw/iw, minh/ih);
|
|
var midr = Math.max(midw/iw, midh/ih);
|
|
var maxr = Math.max(maxw/iw, maxh/ih);
|
|
if (factor<=50) {
|
|
r = (minr * (50-factor) + midr * factor)/50;
|
|
}
|
|
else {
|
|
r = (midr * (100-factor) + maxr * (factor-50))/50;
|
|
}
|
|
var aw = r*iw;
|
|
var ah = r*ih;
|
|
var al = (cw-aw)/2;
|
|
var at = (ch-ah)/2;
|
|
var sd = getSelectorDimention();
|
|
if (aw>cw) al = (cw-aw)/(cw-sd.width)*sd.left;
|
|
if (ah>ch) at = (ch-ah)/(ch-sd.height)*sd.top;
|
|
return { left: Math.floor(al), top: Math.floor(at), width: Math.floor(aw), height: Math.floor(ah) };
|
|
}
|
|
|
|
function clearAvatar() {
|
|
var canvas = getID('avatarcanvas');
|
|
var cw = canvas.width;
|
|
var ch = canvas.height;
|
|
var ctx = canvas.getContext('2d');
|
|
ctx.clearRect(0, 0, cw, ch);
|
|
}
|
|
|
|
function refreshAvatarCanvas(uiposition) {
|
|
var canvas = getID('avatarcanvas');
|
|
var cw = canvas.width;
|
|
var ch = canvas.height;
|
|
var ctx = canvas.getContext('2d');
|
|
ctx.clearRect(0, 0, cw, ch);
|
|
var ad = getAvatarDimension();
|
|
var iw = jQuery('#avatarimage').width();
|
|
var ih = jQuery('#avatarimage').height();
|
|
var img = getID('avatarimage');
|
|
ctx.imageSmoothingQuality = 'high';
|
|
ctx.drawImage(img, 0,0, iw, ih, ad.left, ad.top, ad.width, ad.height);
|
|
var sd = getSelectorDimention();
|
|
if (uiposition) {
|
|
sd.left = uiposition.left;
|
|
sd.top = uiposition.top;
|
|
}
|
|
ctx.fillStyle="rgba(0,0,0,0.6)";
|
|
ctx.fillRect(0, 0, cw, sd.top);
|
|
ctx.fillRect(sd.left+sd.width, sd.top, cw-sd.left-sd.width, ch-sd.top);
|
|
ctx.fillRect(0, sd.top+sd.height, sd.left+sd.width, ch-sd.top-sd.height);
|
|
ctx.fillRect(0, sd.top, sd.left, sd.height);
|
|
}
|
|
|
|
function getSelectorDimention() {
|
|
var sl = Math.ceil(jQuery('.photo-clip-layer').position().left);
|
|
var st = Math.ceil(jQuery('.photo-clip-layer').position().top);
|
|
var sw = jQuery('.photo-clip-layer').width();
|
|
var sh = jQuery('.photo-clip-layer').height();
|
|
return { left: sl, top: st, width: sw, height: sh };
|
|
}
|
|
|
|
function forceSelectorInsideAvatar() {
|
|
var sd = getSelectorDimention();
|
|
var ad = getAvatarDimension();
|
|
if (sd.width>ad.width) jQuery('.photo-clip-layer').width(ad.width);
|
|
if (sd.height>ad.height) jQuery('.photo-clip-layer').height(ad.height);
|
|
sd = getSelectorDimention();
|
|
}
|
|
|
|
function saveAvatar(src) {
|
|
var img = getID('avatarimage');
|
|
var canvas = document.createElement('canvas');
|
|
canvas.width = 200;
|
|
canvas.height = 200;
|
|
var ctx = canvas.getContext("2d");
|
|
ctx.fillStyle = 'white';
|
|
ctx.fillRect(0, 0, 200, 200);
|
|
ctx.drawImage(img, 0, 0, 200, 200, 0, 0, 200, 200);
|
|
var dataURL = canvas.toDataURL("image/jpeg", 1.0);
|
|
jQuery('#avatar1').val(dataURL.substr(dataURL.indexOf(",") + 1));
|
|
|
|
var tw = 120;
|
|
var th = 120;
|
|
var canvas = document.createElement('canvas');
|
|
canvas.width = 120;
|
|
canvas.height = 120;
|
|
var ctx = canvas.getContext("2d");
|
|
ctx.fillRect(0, 0, 120, 120);
|
|
ctx.drawImage(img, 0, 0, 200, 200, 0, 0, 120, 120);
|
|
var dataURL = canvas.toDataURL("image/jpeg", 1.0);
|
|
jQuery('#avatar2').val(dataURL.substr(dataURL.indexOf(",") + 1));
|
|
|
|
|
|
var tw = 48;
|
|
var th = 48;
|
|
var canvas = document.createElement('canvas');
|
|
canvas.width = tw;
|
|
canvas.height = th;
|
|
var ctx = canvas.getContext("2d");
|
|
ctx.fillStyle = 'white';
|
|
ctx.fillRect(0, 0, 48, 48);
|
|
ctx.imageSmoothingQuality = 'high';
|
|
ctx.drawImage(img, 0, 0, 200, 200, 0, 0, 48, 48);
|
|
var dataURL = canvas.toDataURL("image/jpeg", 1.0);
|
|
jQuery('#avatar3').val(dataURL.substr(dataURL.indexOf(",") + 1));
|
|
|
|
var src = getID('avatarform').action;
|
|
getID('avatarform').action = data[data.indexOf('stl_src')+1];
|
|
getID('avatarform').target='rectframe';
|
|
console.log('readysubmit');
|
|
getID('avatarform').submit();
|
|
refreshAvatarCanvasForDisplay();
|
|
console.log('submited');
|
|
jQuery('#avatardisplayer').show();
|
|
jQuery('#avataradjuster').hide();
|
|
jQuery('#avataradjuster2').hide();
|
|
}
|
|
|
|
function refreshAvatarCanvasForDisplay() {
|
|
jQuery('#avatardesigner').height(420);
|
|
var img = getID('avatarimage');
|
|
var canvas = getID('avatardisplaycanvas');
|
|
var ctx = canvas.getContext("2d");
|
|
var ctl = 10;
|
|
var ctt = 10;
|
|
ctx.imageSmoothingQuality = 'high';
|
|
ctx.drawImage(img, 0, 0, 200, 200, 5, ctt, 200, 200);
|
|
ctl += 10 + 200;
|
|
|
|
ctx.drawImage(img, 0, 0, 200, 200, 5, 220, 120, 120);
|
|
ctl += 10 + 120;
|
|
|
|
ctx.drawImage(img, 0, 0, 200, 200, 5, 350, 48, 48);
|
|
|
|
ctx.fillStyle = "black";
|
|
ctx.font = "bold 16px Arial";
|
|
ctx.fillText('上传成功!', dwidth - 160,315);
|
|
ctx.fillStyle = "grey";
|
|
ctx.font = "bold 12px Arial";
|
|
ctx.fillText('以上是您头像的三种尺寸', dwidth - 200, 340);
|
|
}
|
|
|
|
function rectAvatarDone(res) {
|
|
if (!res) return;
|
|
if (res == 'success') {
|
|
jQuery('#avatardisplayer').show();
|
|
jQuery('#avataradjuster').hide();
|
|
jQuery('#avataradjuster2').hide();
|
|
jQuery('#avatarfileselector').hide();
|
|
} else if (res == 'failure') {
|
|
alert('上传失败');
|
|
}
|
|
}
|
|
var clipArea = new PhotoClip("#widgetparent", {
|
|
size: [200, 200],
|
|
outputSize: [200, 200],
|
|
outputType: "jpg",
|
|
file: "#avatarfile",
|
|
ok: "#avconfirm",
|
|
loadStart: function(file) {
|
|
},
|
|
loadComplete: function() {
|
|
},
|
|
loadError: function(msg) {
|
|
},
|
|
done: function(dataURL) {
|
|
imagesAjax(dataURL);
|
|
},
|
|
fail: function(msg) {
|
|
},
|
|
});
|
|
|
|
function imagesAjax(src) {
|
|
jQuery('#avatarimage').attr('src', src);
|
|
setTimeout(function() {saveAvatar(src);}, 1000);
|
|
} |