1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564 |
- /*
- * CROPPIC
- * dependancy: jQuery
- * author: Ognjen "Zmaj Džedaj" Božičković and Mat Steinlin
- */
- (function (window, document) {
- Croppic = function (id, options) {
- var that = this;
- that.id = id;
- that.obj = $('#' + id);
- that.outputDiv = that.obj;
- that.imgUrl = "";
- that.saveImgUrl = "";
- that.imgBackground = "";
- // DEFAULT OPTIONS
- that.options = {
- uploadUrl: '',
- uploadData: {},
- cropUrl: '',
- cropData: {},
- outputUrlId: '',
- absorptionUrl: '',
- //styles
- imgEyecandy: true,
- imgEyecandyOpacity: 0.2,
- initialZoom: 40,
- zoomFactor: 10,
- rotateFactor: 5,
- doubleZoomControls: true,
- rotateControls: true,
- modal: false,
- customUploadButtonId: '',
- customSaveButtonId: '',
- loaderHtml: '',
- scaleToFill: true,
- processInline: false,
- loadPicture: '',
- onReset: null,
- enableMousescroll: false,
- colorAbsorption: false,
- //callbacks
- onBeforeImgUpload: null,
- onAfterImgUpload: null,
- onImgDrag: null,
- onImgZoom: null,
- onImgRotate: null,
- onBeforeImgCrop: null,
- onAfterImgCrop: null,
- onBeforeRemoveCroppedImg: null,
- onAfterRemoveCroppedImg: null,
- onError: null,
- };
- // OVERWRITE DEFAULT OPTIONS
- for (i in options) that.options[i] = options[i];
- // INIT THE WHOLE DAMN THING!!!
- that.init();
- };
- Croppic.prototype = {
- id: '',
- imgInitW: 0,
- imgInitH: 0,
- imgW: 0,
- imgH: 0,
- actualRotationImgW: 0,
- actualRotationImgH: 0,
- objW: 0,
- objH: 0,
- actualRotation: 0,
- windowW: 0,
- windowH: $(window).height(),
- obj: {},
- outputDiv: {},
- outputUrlObj: {},
- img: {},
- defaultImg: {},
- croppedImg: {},
- imgEyecandy: {},
- form: {},
- iframeform: {},
- iframeobj: {},
- cropControlsUpload: {},
- cropControlsCrop: {},
- cropControlZoomMuchIn: {},
- cropControlZoomMuchOut: {},
- cropControlZoomIn: {},
- cropControlZoomOut: {},
- cropControlCrop: {},
- cropControlReset: {},
- cropControlRemoveCroppedImage: {},
- cropControlOriginal: {},
- modal: {},
- loader: {},
- cropSaveControl: {},
- ctx: {},
- imgName: '',
- init: function () {
- var that = this;
- that.objW = that.obj.width();
- that.objH = that.obj.height();
- // reset rotation
- that.actualRotation = 0;
- that.actualRotationImgH = 0;
- that.actualRotationImgW = 0;
- that.colorAbsorption = false;
- that.imgBackground = "";
- that.ctx = {};
- that.imgName = '';
- if ($.isEmptyObject(that.defaultImg)) {
- that.defaultImg = that.obj.find('img');
- }
- that.createImgUploadControls();
- if ($.isEmptyObject(that.options.loadPicture)) {
- that.bindImgUploadControl();
- } else {
- that.loadExistingImage();
- }
- },
- createImgUploadControls: function () {
- var that = this;
- var cropControlUpload = '';
- if (that.options.customUploadButtonId === '') {
- cropControlUpload = '<i class="cropControlUpload"></i>';
- }
- var cropControlRemoveCroppedImage = '<i class="cropControlRemoveCroppedImage"></i>';
- var cropControlOriginal = '<i class="cropControlOriginal"></i>';
- if ($.isEmptyObject(that.croppedImg)) {
- cropControlRemoveCroppedImage = '';
- cropControlOriginal = '';
- }
- if (!$.isEmptyObject(that.options.loadPicture)) {
- cropControlUpload = '';
- }
- var html = '<div class="cropControls cropControlsUpload"> ' + cropControlUpload + cropControlOriginal + cropControlRemoveCroppedImage + ' </div>';
- that.outputDiv.append(html);
- that.cropControlsUpload = that.outputDiv.find('.cropControlsUpload');
- if (that.options.customUploadButtonId === '') {
- that.imgUploadControl = that.outputDiv.find('.cropControlUpload');
- }
- else {
- that.imgUploadControl = $('#' + that.options.customUploadButtonId);
- that.imgUploadControl.show();
- }
- if (that.options.customSaveButtonId !== '') {
- that.cropSaveControl = $('#' + that.options.customSaveButtonId);
- that.cropSaveControl.hide();
- }
- if (!$.isEmptyObject(that.croppedImg)) {
- that.cropControlRemoveCroppedImage = that.outputDiv.find('.cropControlRemoveCroppedImage');
- that.cropControlOriginal = that.outputDiv.find('.cropControlOriginal');
- }
- },
- bindImgUploadControl: function () {
- var that = this;
- // CREATE UPLOAD IMG FORM
- var formHtml = '<form class="' + that.id + '_imgUploadForm" style="visibility: hidden;"> <input type="file" name="img" id="' + that.id + '_imgUploadField"> </form>';
- that.outputDiv.append(formHtml);
- that.form = that.outputDiv.find('.' + that.id + '_imgUploadForm');
- // CREATE FALLBACK IE9 IFRAME
- var fileUploadId = that.CreateFallbackIframe();
- that.imgUploadControl.off('click');
- that.imgUploadControl.on('click', function () {
- if (fileUploadId === "") {
- that.form.find('input[type="file"]').trigger('click');
- } else {
- //Trigger iframe file input click, otherwise access restriction error
- that.iframeform.find('input[type="file"]').trigger('click');
- }
- });
- that.cropSaveControl.off('click');
- that.cropSaveControl.on('click', function () {
- that.destroy();
- window.location.href = "https://wwww.croppic.com?" + that.saveImgUrl;
- });
- if (!$.isEmptyObject(that.croppedImg)) {
- that.cropControlRemoveCroppedImage.on('click', function () {
- if (typeof (that.options.onBeforeRemoveCroppedImg) === typeof(Function)) {
- that.options.onBeforeRemoveCroppedImg.call(that);
- }
- var res = confirm('您是要使用当前图片还是重新选择图片?\n\r' +
- '[确认] 使用当前图片\n\r' +
- '[取消] 重新选择图片');
- var width = that.imgInitW;
- var height = that.imgInitH;
- that.croppedImg.remove();
- that.croppedImg = {};
- $(this).hide();
- that.cropSaveControl.hide();
- that.cropControlOriginal.hide();
- if (typeof (that.options.onAfterRemoveCroppedImg) === typeof(Function)) {
- that.options.onAfterRemoveCroppedImg.call(that);
- }
- if (!$.isEmptyObject(that.defaultImg)) {
- that.obj.append(that.defaultImg);
- }
- if (that.options.outputUrlId !== '') {
- $('#' + that.options.outputUrlId).val('');
- }
- that.imgUploadControl.show();
- if (res) {
- that.showLoader();
- that.imgUploadControl.hide();
- if (!$.isEmptyObject(that.croppedImg)) {
- that.croppedImg.remove();
- }
- that.imgInitW = that.imgW = width;
- that.imgInitH = that.imgH = height;
- that.saveImgUrl = "";
- that.obj.append('<img src="' + that.imgUrl + '">');
- that.initCropper();
- that.hideLoader();
- }
- });
- that.cropControlOriginal.on('click', function () {
- if (that.imgUrl == '') {
- alert('请选择图片');
- return;
- }
- var res = confirm('您确定要使用原图吗?\n\r' +
- '[确认] 使用原图\n\r' +
- '[取消] 继续编辑');
- if (res) {
- that.destroy();
- window.location.href = "https://wwww.croppic.com?" + that.imgUrl;
- }
- });
- }
- that.form.find('input[type="file"]').change(function () {
- if (that.options.onBeforeImgUpload) that.options.onBeforeImgUpload.call(that);
- that.showLoader();
- that.imgUploadControl.hide();
- if (that.options.processInline) {
- // Checking Browser Support for FileReader API
- if (typeof FileReader == "undefined") {
- if (that.options.onError) that.options.onError.call(that, "processInline is not supported by your Browser");
- that.reset();
- } else {
- var file = that.form.find('input[type="file"]')[0].files[0];
- var rFilter = /^(image\/jpeg|image\/png)$/i; // 检查图片格式
- if (!rFilter.test(file.type)) {
- alert("请选择jpeg、png格式的图片");
- that.imgUploadControl.show();
- that.hideLoader();
- return;
- }
- if (!$.isEmptyObject(that.croppedImg)) {
- that.destroy();
- }
- var Orientation = null;
- //获取照片方向角属性,用户旋转控制
- EXIF.getData(file, function () {
- EXIF.getAllTags(this);
- Orientation = EXIF.getTag(this, 'Orientation');
- });
- var reader = new FileReader();
- reader.onload = function (e) {
- if (Orientation != null && Orientation != "" && Orientation != 1
- && (Orientation == 8 || Orientation == 6 || Orientation == 3)) {
- // that.takingCorrectJs(file);
- that.takingCorrectJs2(e.target.result,Orientation);
- // that.takingCorrect(e.target.result);
- reader.clear();
- reader.destroy();
- return;
- }
- var image = new Image();
- image.src = e.target.result;
- image.onload = function () {
- that.imgInitW = that.imgW = image.width;
- that.imgInitH = that.imgH = image.height;
- that.imgUrl = image.src;
- if (that.options.modal) {
- that.createModal();
- }
- if (!$.isEmptyObject(that.croppedImg)) {
- that.croppedImg.remove();
- }
- that.saveImgUrl = "";
- that.obj.append('<img src="' + image.src + '">');
- that.initCropper();
- that.hideLoader();
- if (that.options.onAfterImgUpload) that.options.onAfterImgUpload.call(that);
- }
- };
- reader.readAsDataURL(file);
- }
- } else {
- try {
- // other modern browsers
- formData = new FormData(that.form[0]);
- } catch (e) {
- // IE10 MUST have all form items appended as individual form key / value pairs
- formData = new FormData();
- formData.append('img', that.form.find("input[type=file]")[0].files[0]);
- }
- for (var key in that.options.uploadData) {
- if (that.options.uploadData.hasOwnProperty(key)) {
- formData.append(key, that.options.uploadData[key]);
- }
- }
- $.ajax({
- url: that.options.uploadUrl,
- data: formData,
- context: document.body,
- cache: false,
- contentType: false,
- processData: false,
- type: 'POST'
- }).always(function (data) {
- that.afterUpload(data);
- });
- }
- });
- },
- takingCorrectJs: function (file) {
- var that = this;
- lrz(file, {quality: 1}).then(function (rst) {
- // console.log(rst.base64); //图片格式为base64;
- var image = new Image();
- image.src = rst.base64;
- image.onload = function () {
- that.imgInitW = that.imgW = image.width;
- that.imgInitH = that.imgH = image.height;
- that.imgUrl = image.src;
- if (that.options.modal) {
- that.createModal();
- }
- if (!$.isEmptyObject(that.croppedImg)) {
- that.croppedImg.remove();
- }
- that.saveImgUrl = "";
- that.obj.append('<img src="' + image.src + '">');
- that.initCropper();
- that.hideLoader();
- if (that.options.onAfterImgUpload) that.options.onAfterImgUpload.call(that);
- }
- }).catch(function (err) {
- alert("打开图片失败");
- // 处理失败会执行
- }).always(function () {
- // 不管是成功失败,都会执行
- });
- },
- // 此方法是旋转图片;
- takingCorrectJs2: function (img, dir) {
- var that = this;
- var image = new Image();
- image.onload = function () {
- var degree = 0, drawWidth, drawHeight, width, height;
- drawWidth = this.naturalWidth;
- drawHeight = this.naturalHeight;
- //以下改变一下图片大小
- // var maxSide = Math.max(drawWidth, drawHeight);
- // if (maxSide > 3072) {
- // var minSide = Math.min(drawWidth, drawHeight);
- // minSide = minSide / maxSide * 3072;
- // maxSide = 3072;
- // if (drawWidth > drawHeight) {
- // drawWidth = maxSide;
- // drawHeight = minSide;
- // } else {
- // drawWidth = minSide;
- // drawHeight = maxSide;
- // }
- // }
- var canvas = document.createElement('canvas');
- canvas.width = width = drawWidth;
- canvas.height = height = drawHeight;
- var context = canvas.getContext('2d');
- //判断图片方向,重置canvas大小,确定旋转角度,iphone默认的是home键在右方的横屏拍摄方式
- switch (dir) {
- //iphone横屏拍摄,此时home键在左侧
- case 3:
- degree = 180;
- drawWidth = -width;
- drawHeight = -height;
- break;
- //iphone竖屏拍摄,此时home键在下方(正常拿手机的方向)
- case 6:
- canvas.width = height;
- canvas.height = width;
- degree = 90;
- drawWidth = width;
- drawHeight = -height;
- break;
- //iphone竖屏拍摄,此时home键在上方
- case 8:
- canvas.width = height;
- canvas.height = width;
- degree = 270;
- drawWidth = -width;
- drawHeight = height;
- break;
- }
- //使用canvas旋转校正
- context.rotate(degree * Math.PI / 180);
- context.drawImage(this, 0, 0, drawWidth, drawHeight);
- // 判断图片 类型 (可增加判断的类型 此处只判断了 jpeg 和png)
- var imgtype = img.includes('image/png') ? "image/png" : "image/jpeg";
- //返回校正图片
- var imageNext = new Image();
- imageNext.onload = function () {
- that.imgInitW = that.imgW = imageNext.width;
- that.imgInitH = that.imgH = imageNext.height;
- that.imgUrl = imageNext.src;
- if (that.options.modal) {
- that.createModal();
- }
- if (!$.isEmptyObject(that.croppedImg)) {
- that.croppedImg.remove();
- }
- that.saveImgUrl = "";
- that.obj.append('<img src="' + imageNext.src + '">');
- that.initCropper();
- that.hideLoader();
- if (that.options.onAfterImgUpload) that.options.onAfterImgUpload.call(that);
- }
- imageNext.src = canvas.toDataURL(imgtype, 1);
- }
- image.src = img;
- },
- takingCorrect: function (file) {
- var time = new Date(); // 程序计时的月从0开始取值后+1
- var t = time.getHours() + ":" + time.getMinutes() + ":" + time.getSeconds();
- var meg = '开始上传:' + t;
- var that = this;
- var formData = new FormData();
- var mime = that.getFileMime(file);
- formData.append("imgUrl", that.convertBase64UrlToBlob(file));
- var xhr = new XMLHttpRequest();
- xhr.open("POST", "taking", true);
- xhr.responseType = "blob";
- xhr.timeout = 60000 * 5;
- xhr.onload = function () {
- if (xhr.readyState === 4 && xhr.status === 200) {
- var blob = this.response;
- var Error = this.getResponseHeader("Content-My-Error");
- if (Error != null) {
- var ErrorMeg = decodeURIComponent(atob(Error).split('').map(function (c) {
- return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
- }).join(''));
- if (that.options.onError) that.options.onError.call(that, ErrorMeg);
- that.imgUploadControl.show();
- that.hideLoader();
- return;
- }
- var filename = xhr.getResponseHeader("Content-My-filename");
- if (filename != null) {
- that.imgName = filename;
- meg = meg + " \n\r" + '上传完成准备处理:' + xhr.getResponseHeader("Content-My-start");
- meg = meg + " \n\r" + '处理完成准备下载:' + xhr.getResponseHeader("Content-My-end");
- var time2 = new Date(); // 程序计时的月从0开始取值后+1
- var t2 = time2.getHours() + ":" + time2.getMinutes() + ":" + time2.getSeconds();
- meg = meg + " \n\r" + '下载完成:' + t2;
- }
- var reader = new FileReader();
- reader.onload = function (e) {
- var image = new Image();
- image.src = e.target.result;
- image.onload = function () {
- that.imgInitW = that.imgW = image.width;
- that.imgInitH = that.imgH = image.height;
- var arr = image.src.split(',');
- that.imgUrl = 'data:' + mime + ';base64,' + arr[1];
- if (that.options.modal) {
- that.createModal();
- }
- if (!$.isEmptyObject(that.croppedImg)) {
- that.croppedImg.remove();
- }
- that.saveImgUrl = "";
- that.obj.append('<img src="' + that.imgUrl + '">');
- that.initCropper();
- that.hideLoader();
- if (that.options.onAfterImgUpload) that.options.onAfterImgUpload.call(that);
- // alert(meg);
- }
- }
- reader.readAsDataURL(blob);
- } else {
- if (that.options.onError) that.options.onError.call(that, "处理失败,错误代码["+xhr.readyState+"]");
- that.imgUploadControl.show();
- that.hideLoader();
- }
- };
- xhr.send(formData);
- }
- , loadExistingImage: function () {
- var that = this;
- if ($.isEmptyObject(that.croppedImg)) {
- if (that.options.onBeforeImgUpload) that.options.onBeforeImgUpload.call(that);
- that.showLoader();
- if (that.options.modal) {
- that.createModal();
- }
- if (!$.isEmptyObject(that.croppedImg)) {
- that.croppedImg.remove();
- }
- that.imgUrl = that.options.loadPicture;
- var img = $('<img src="' + that.options.loadPicture + '">');
- that.obj.append(img);
- img.load(function () {
- that.imgInitW = that.imgW = this.width;
- that.imgInitH = that.imgH = this.height;
- that.initCropper();
- that.hideLoader();
- if (that.options.onAfterImgUpload) that.options.onAfterImgUpload.call(that);
- });
- } else {
- that.cropControlRemoveCroppedImage.on('click', function () {
- var res = confirm('您是要使用当前图片还是重新选择图片?\n\r' +
- '[确认] 使用当前图片\n\r' +
- '[取消] 重新选择图片');
- var width = that.imgInitW;
- var height = that.imgInitH;
- that.croppedImg.remove();
- $(this).hide();
- that.cropSaveControl.hide();
- that.cropControlOriginal.hide();
- if (!$.isEmptyObject(that.defaultImg)) {
- that.obj.append(that.defaultImg);
- }
- if (that.options.outputUrlId !== '') {
- $('#' + that.options.outputUrlId).val('');
- }
- that.croppedImg = '';
- that.reset();
- if (res) {
- that.showLoader();
- that.imgUploadControl.hide();
- if (!$.isEmptyObject(that.croppedImg)) {
- that.croppedImg.remove();
- }
- that.imgInitW = that.imgW = width;
- that.imgInitH = that.imgH = height;
- that.saveImgUrl = "";
- that.obj.append('<img src="' + that.imgUrl + '">');
- that.initCropper();
- that.hideLoader();
- }
- });
- }
- },
- afterUpload: function (data) {
- var that = this;
- response = typeof data == 'object' ? data : jQuery.parseJSON(data);
- if (response.status == 'success') {
- that.imgInitW = that.imgW = response.width;
- that.imgInitH = that.imgH = response.height;
- if (that.options.modal) {
- that.createModal();
- }
- if (!$.isEmptyObject(that.croppedImg)) {
- that.croppedImg.remove();
- }
- that.imgUrl = response.url;
- var img = $('<img src="' + response.url + '">')
- that.obj.append(img);
- img.load(function () {
- that.initCropper();
- that.hideLoader();
- if (that.options.onAfterImgUpload) that.options.onAfterImgUpload.call(that);
- });
- if (that.options.onAfterImgUpload) that.options.onAfterImgUpload.call(that);
- }
- if (response.status == 'error') {
- alert(response.message);
- if (that.options.onError) that.options.onError.call(that, response.message);
- that.hideLoader();
- // setTimeout( function(){ that.reset(); },2000)
- }
- },
- createModal: function () {
- var that = this;
- var marginTop = that.windowH / 2 - that.objH / 2;
- var modalHTML = '<div id="croppicModal">' + '<div id="croppicModalObj" style="width:' + that.objW + 'px; height:' + that.objH + 'px; margin:0 auto; margin-top:' + marginTop + 'px; position: relative;"> </div>' + '</div>';
- $('body').append(modalHTML);
- that.modal = $('#croppicModal');
- that.obj = $('#croppicModalObj');
- },
- destroyModal: function () {
- var that = this;
- that.obj = that.outputDiv;
- that.modal.remove();
- that.modal = {};
- },
- initCropper: function () {
- var that = this;
- /*SET UP SOME VARS*/
- that.img = that.obj.find('img');
- that.img.wrap('<div class="cropImgWrapper" style="overflow:hidden; z-index:1; position:absolute; width:' + that.objW + 'px; height:' + that.objH + 'px;"></div>');
- /*INIT DRAGGING*/
- that.createCropControls();
- if (that.options.imgEyecandy) {
- that.createEyecandy();
- }
- that.initDrag();
- that.initialScaleImg();
- },
- createEyecandy: function () {
- var that = this;
- that.imgEyecandy = that.img.clone();
- that.imgEyecandy.css({'z-index': '0', 'opacity': that.options.imgEyecandyOpacity}).appendTo(that.obj);
- },
- destroyEyecandy: function () {
- var that = this;
- that.imgEyecandy.remove();
- },
- initialScaleImg: function () {
- var that = this;
- that.zoom(0);
- that.zoom(that.options.initialZoom);
- // Adding mousewheel zoom capabilities
- if (that.options.enableMousescroll) {
- that.img.on('mousewheel', function (event) {
- event.preventDefault();
- if (that.colorAbsorption) {
- return;
- }
- that.zoom(that.options.zoomFactor * event.deltaY);
- });
- }
- // initial center image
- that.img.css({
- 'left': -(that.imgW - that.objW) / 2,
- 'top': -(that.imgH - that.objH) / 2,
- 'position': 'relative'
- });
- if (that.options.imgEyecandy) {
- that.imgEyecandy.css({
- 'left': -(that.imgW - that.objW) / 2,
- 'top': -(that.imgH - that.objH) / 2,
- 'position': 'relative'
- });
- }
- },
- createCropControls: function () {
- var that = this;
- // CREATE CONTROLS
- var cropControlZoomMuchIn = '';
- var cropControlZoomIn = '<i class="cropControlZoomIn"></i>';
- var cropControlZoomOut = '<i class="cropControlZoomOut"></i>';
- var cropControlZoomMuchOut = '';
- var cropControlRotateLeft = '';
- var cropControlRotateRight = '';
- var cropControlRotateMuchLeft = '';
- var cropControlRotateMuchRight = '';
- var cropControlCrop = '<i class="cropControlCrop"></i>';
- var cropControlReset = '<i class="cropControlReset"></i>';
- var cropControlOriginal = '<i class="cropControlOriginal"></i>';
- var cropControlXiColor = '<i class="cropControlXiColor"></i>';
- var cropControlXiColor2 = '<i class="cropControlXiColor2"></i>';
- var cropControlSetColor = '<i class="cropControlSetColor"></i>';
- var html;
- if (that.options.doubleZoomControls) {
- cropControlZoomMuchIn = '<i class="cropControlZoomMuchIn"></i>';
- cropControlZoomMuchOut = '<i class="cropControlZoomMuchOut"></i>';
- }
- if (that.options.rotateControls) {
- cropControlRotateLeft = '<i class="cropControlRotateLeft"></i>';
- cropControlRotateRight = '<i class="cropControlRotateRight"></i>';
- cropControlRotateMuchLeft = '<i class="cropControlRotateMuchLeft"></i>';
- cropControlRotateMuchRight = '<i class="cropControlRotateMuchRight"></i>';
- }
- html = '<div class="cropControls cropControlsCrop">' + cropControlZoomMuchIn + cropControlZoomIn + cropControlZoomOut + cropControlZoomMuchOut
- + cropControlRotateMuchLeft + cropControlRotateLeft + cropControlRotateRight + cropControlRotateMuchRight + cropControlCrop + '</div>';
- that.obj.append(html);
- html = '<div class="cropControls cropControlsCrop cropControlsUpload">' + cropControlXiColor2 + cropControlXiColor + cropControlSetColor + cropControlOriginal + cropControlReset + '</div>';
- that.obj.append(html);
- that.cropControlsCrop = that.obj.find('.cropControlsCrop');
- // CACHE AND BIND CONTROLS
- if (that.options.doubleZoomControls) {
- that.cropControlZoomMuchIn = that.cropControlsCrop.find('.cropControlZoomMuchIn');
- that.cropControlZoomMuchIn.on('click', function () {
- that.zoom(that.options.zoomFactor * 10);
- });
- that.cropControlZoomMuchOut = that.cropControlsCrop.find('.cropControlZoomMuchOut');
- that.cropControlZoomMuchOut.on('click', function () {
- that.zoom(-that.options.zoomFactor * 10);
- });
- }
- that.cropControlZoomIn = that.cropControlsCrop.find('.cropControlZoomIn');
- that.cropControlZoomIn.on('click', function () {
- that.zoom(that.options.zoomFactor);
- });
- that.cropControlZoomOut = that.cropControlsCrop.find('.cropControlZoomOut');
- that.cropControlZoomOut.on('click', function () {
- that.zoom(-that.options.zoomFactor);
- });
- that.cropControlRotateLeft = that.cropControlsCrop.find('.cropControlRotateLeft');
- that.cropControlRotateLeft.on('click', function () {
- that.rotate(-0.5);
- });
- that.cropControlRotateMuchLeft = that.cropControlsCrop.find('.cropControlRotateMuchLeft');
- that.cropControlRotateMuchLeft.on('click', function () {
- that.rotate(-10);
- });
- that.cropControlRotateRight = that.cropControlsCrop.find('.cropControlRotateRight');
- that.cropControlRotateRight.on('click', function () {
- that.rotate(0.5);
- });
- that.cropControlRotateMuchRight = that.cropControlsCrop.find('.cropControlRotateMuchRight');
- that.cropControlRotateMuchRight.on('click', function () {
- that.rotate(10);
- });
- that.cropControlCrop = that.cropControlsCrop.find('.cropControlCrop');
- that.cropControlCrop.on('click', function () {
- that.crop();
- });
- that.cropControlReset = that.cropControlsCrop.find('.cropControlReset');
- that.cropControlReset.on('click', function () {
- var res = confirm('您是要使用当前图片还是重新选择图片?\n\r' +
- '[确认] 使用当前图片\n\r' +
- '[取消] 重新选择图片');
- var width = that.imgInitW;
- var height = that.imgInitH;
- that.reset();
- if (res) {
- that.showLoader();
- that.imgUploadControl.hide();
- if (!$.isEmptyObject(that.croppedImg)) {
- that.croppedImg.remove();
- }
- that.imgInitW = that.imgW = width;
- that.imgInitH = that.imgH = height;
- that.saveImgUrl = "";
- that.obj.append('<img src="' + that.imgUrl + '">');
- that.initCropper();
- that.hideLoader();
- }
- });
- that.cropControlOriginal = that.cropControlsCrop.find('.cropControlOriginal');
- that.cropControlOriginal.on('click', function () {
- if (that.imgUrl == '') {
- alert('请选择图片');
- return;
- }
- var res = confirm('您确定要使用原图吗?\n\r' +
- '[确认] 使用原图\n\r' +
- '[取消] 继续编辑');
- if (res) {
- that.destroy();
- // prompt(that.imgUrl);
- window.location.href = "https://wwww.croppic.com?" + that.imgUrl;
- }
- });
- that.cropControlXiColor = that.cropControlsCrop.find('.cropControlXiColor');
- that.cropControlXiColor.on('click', function () {
- that.colorOnClick(false);
- });
- that.cropControlXiColor2 = that.cropControlsCrop.find('.cropControlXiColor2');
- that.cropControlXiColor2.on('click', function () {
- that.colorOnClick(false);
- });
- that.cropControlSetColor = that.cropControlsCrop.find('.cropControlSetColor');
- that.cropControlSetColor.on('click', function () {
- that.colorOnClick(true);
- });
- that.colpick = that.cropControlSetColor.colpick({
- onSubmit: function (hsb, hex, rgb, el) {
- var background = "rgb(" + rgb.r + "," + rgb.g + "," + rgb.b + ")";
- that.obj.find('.cropImgWrapper').css('background', background);
- $(el).colpickHide();
- that.imgBackground = background;
- }
- });
- },
- colorOnClick: function (input) {
- var that = this;
- if (that.colorAbsorption || input) {
- that.cropControlsCrop.find('.cropControlXiColor').css("display", "block");
- that.cropControlsCrop.find('.cropControlXiColor2').css("display", "none");
- that.colorAbsorption = false;
- } else {
- that.cropControlsCrop.find('.cropControlXiColor').css("display", "none");
- that.cropControlsCrop.find('.cropControlXiColor2').css("display", "block");
- that.colorAbsorption = true;
- }
- },
- absorption: function (pageX, pageY) {
- var that = this;
- that.showLoader();
- that.cropControlsCrop.hide();
- var cropData = {
- imgInitW: that.imgInitW,
- imgInitH: that.imgInitH,
- imgW: that.imgW,
- imgH: that.imgH,
- imgY1: parseInt(that.img.css('top')),
- imgX1: parseInt(that.img.css('left')),
- cropH: that.objH,
- cropW: that.objW,
- rotation: that.actualRotation,
- pageX: pageX,
- pageY: pageY,
- imgBackground: that.imgBackground
- };
- var formData = new FormData();
- for (var key in cropData) {
- if (cropData.hasOwnProperty(key)) {
- formData.append(key, cropData[key]);
- }
- }
- if (that.imgName == '') {
- formData.append("imgUrl", that.convertBase64UrlToBlob(that.imgUrl));
- } else {
- formData.append("imgName", that.imgName);
- }
- $.ajax({
- url: that.options.absorptionUrl,
- data: formData,
- cache: false,
- contentType: false,
- processData: false,
- type: 'POST'
- }).always(function (data) {
- var response;
- try {
- response = jQuery.parseJSON(data);
- }
- catch (err) {
- response = typeof data == 'object' ? data : jQuery.parseJSON(data);
- }
- if (response.status == 'success') {
- that.imgName = response.imgName;
- var rgb = {r: response.r, g: response.g, b: response.b};
- var background = "rgb(" + rgb.r + "," + rgb.g + "," + rgb.b + ")";
- that.obj.find('.cropImgWrapper').css("background", background);
- that.imgBackground = background;
- that.cropControlSetColor.colpickSetColor(rgb);
- } else if (response.status == 'error') {
- if (that.options.onError) that.options.onError.call(that, response.message);
- } else {
- if (that.options.onError) that.options.onError.call(that, "处理失败");
- }
- that.cropControlsCrop.show();
- that.hideLoader();
- });
- },
- initDrag: function () {
- var that = this;
- that.img.on("mousedown touchstart", function (e) {
- e.preventDefault(); // disable selection
- var pageX;
- var pageY;
- var userAgent = window.navigator.userAgent;
- if (userAgent.match(/iPad/i) || userAgent.match(/iPhone/i) || userAgent.match(/android/i) || (e.pageY && e.pageX) == undefined) {
- pageX = e.originalEvent.touches[0].pageX;
- pageY = e.originalEvent.touches[0].pageY;
- } else {
- pageX = e.pageX;
- pageY = e.pageY;
- }
- var z_idx = that.img.css('z-index'),
- drg_h = that.img.outerHeight(),
- drg_w = that.img.outerWidth(),
- pos_y = that.img.offset().top + drg_h - pageY,
- pos_x = that.img.offset().left + drg_w - pageX;
- that.z_idx = z_idx;
- that.drg_h = drg_h;
- that.drg_w = drg_w;
- that.pos_y = pos_y;
- that.pos_x = pos_x;
- if (that.colorAbsorption) {
- if (that.actualRotation !== 0) {
- that.absorption(pageX - 10, pageY - 50);
- return;
- }
- var ml = that.imgInitW / that.imgW;
- var x = pageX - parseInt(that.img.css('left')) - 10;
- var y = pageY - parseInt(that.img.css('top')) - 50;
- x = parseInt(x * ml);
- y = parseInt(y * ml);
- if (!(x < 0 || x > that.imgInitW || y < 0 || y > that.imgInitH)) {
- var imgData = {};
- if ($.isEmptyObject(that.ctx)) {
- var canvas = document.createElement("canvas");
- if (!canvas.getContext) {
- alert("浏览器版本太低无法使用吸色!");
- return;
- }
- that.ctx = canvas.getContext("2d");
- var newImg = new Image();
- newImg.onload = function () {
- canvas.width = that.imgInitW;
- canvas.height = that.imgInitH;
- that.ctx.drawImage(newImg, 0, 0);
- imgData = that.ctx.getImageData(x, y, 1, 1);
- var rgb = {r: imgData.data[0], g: imgData.data[1], b: imgData.data[2]};
- var background = "rgb(" + rgb.r + "," + rgb.g + "," + rgb.b + ")";
- that.obj.find('.cropImgWrapper').css("background", background);
- that.imgBackground = background;
- that.cropControlSetColor.colpickSetColor(rgb);
- }
- newImg.src = that.imgUrl;
- } else {
- imgData = that.ctx.getImageData(x, y, 1, 1);
- var rgb = {r: imgData.data[0], g: imgData.data[1], b: imgData.data[2]};
- var background = "rgb(" + rgb.r + "," + rgb.g + "," + rgb.b + ")";
- that.obj.find('.cropImgWrapper').css("background", background);
- that.imgBackground = background;
- that.cropControlSetColor.colpickSetColor(rgb);
- }
- }
- return;
- }
- }).on("mouseup", function () {
- that.img.off("mousemove");
- }).on("mouseout", function () {
- that.img.off("mousemove");
- });
- that.img.css('z-index', 1000).on("mousemove touchmove", function (e) {
- e.preventDefault();
- if (that.colorAbsorption) {
- return;
- }
- var z_idx = that.z_idx;
- var drg_h = that.drg_h;
- var drg_w = that.drg_w;
- var pos_y = that.pos_y;
- var pos_x = that.pos_x;
- var imgTop;
- var imgLeft;
- var userAgent = window.navigator.userAgent;
- if (userAgent.match(/iPad/i) || userAgent.match(/iPhone/i) || userAgent.match(/android/i) || (e.pageY && e.pageX) == undefined) {
- imgTop = e.originalEvent.touches[0].pageY + pos_y - drg_h;
- imgLeft = e.originalEvent.touches[0].pageX + pos_x - drg_w;
- } else {
- imgTop = e.pageY + pos_y - drg_h;
- imgLeft = e.pageX + pos_x - drg_w;
- }
- that.img.offset({
- top: imgTop,
- left: imgLeft
- }).on("mouseup", function () {
- $(this).removeClass('draggable').css('z-index', z_idx);
- });
- if (that.options.imgEyecandy) {
- that.imgEyecandy.offset({top: imgTop, left: imgLeft});
- }
- var top = that.actualRotationImgH;
- var left = that.actualRotationImgW;
- if (that.objH < that.imgH + top * 2) {
- if (parseInt(that.img.css('top')) > top) {
- that.img.css('top', top);
- if (that.options.imgEyecandy) {
- that.imgEyecandy.css('top', top);
- }
- }
- var maxTop = -(that.imgH - that.objH + top);
- if (parseInt(that.img.css('top')) < maxTop) {
- that.img.css('top', maxTop);
- if (that.options.imgEyecandy) {
- that.imgEyecandy.css('top', maxTop);
- }
- }
- } else {
- if (parseInt(that.img.css('top')) < -top) {
- that.img.css('top', -top);
- if (that.options.imgEyecandy) {
- that.imgEyecandy.css('top', -top);
- }
- }
- var maxTop = that.objH - that.imgH + top;
- if (parseInt(that.img.css('top')) > maxTop) {
- that.img.css('top', maxTop);
- if (that.options.imgEyecandy) {
- that.imgEyecandy.css('top', maxTop);
- }
- }
- }
- if (that.objW < that.imgW + 2 * left) {
- if (parseInt(that.img.css('left')) > left) {
- that.img.css('left', left);
- if (that.options.imgEyecandy) {
- that.imgEyecandy.css('left', left);
- }
- }
- var maxLeft = -(that.imgW - that.objW + left);
- if (parseInt(that.img.css('left')) < maxLeft) {
- that.img.css('left', maxLeft);
- if (that.options.imgEyecandy) {
- that.imgEyecandy.css('left', maxLeft);
- }
- }
- } else {
- if (parseInt(that.img.css('left')) < -left) {
- that.img.css('left', -left);
- if (that.options.imgEyecandy) {
- that.imgEyecandy.css('left', -left);
- }
- }
- var maxLeft = (that.objW - that.imgW + left);
- if (parseInt(that.img.css('left')) > maxLeft) {
- that.img.css('left', maxLeft);
- if (that.options.imgEyecandy) {
- that.imgEyecandy.css('left', maxLeft);
- }
- }
- }
- if (that.options.onImgDrag) that.options.onImgDrag.call(that);
- });
- },
- rotate: function (x) {
- var that = this;
- that.colorOnClick(true);
- that.actualRotation += x;
- that.img.css({
- '-webkit-transform': 'rotate(' + that.actualRotation + 'deg)',
- '-moz-transform': 'rotate(' + that.actualRotation + 'deg)',
- 'transform': 'rotate(' + that.actualRotation + 'deg)',
- });
- if (that.options.imgEyecandy) {
- that.imgEyecandy.css({
- '-webkit-transform': 'rotate(' + that.actualRotation + 'deg)',
- '-moz-transform': 'rotate(' + that.actualRotation + 'deg)',
- 'transform': 'rotate(' + that.actualRotation + 'deg)',
- });
- }
- that.actualRotationImgH = 0;
- that.actualRotationImgW = 0;
- if (that.actualRotation != 0) {
- var actualRotation = that.actualRotation % 360;
- if (actualRotation < 0) {
- actualRotation = 0 - actualRotation;
- }
- if (actualRotation == 90 || actualRotation == 270) {
- if (that.imgH > that.imgW) {
- that.actualRotationImgW = parseInt((that.imgH - that.imgW) / 2);
- } else if (that.imgH < that.imgW) {
- that.actualRotationImgH = parseInt((that.imgW - that.imgH) / 2);
- }
- } else if (actualRotation != 180 && actualRotation != 360) {
- if (actualRotation > 180) {
- actualRotation = actualRotation - 180;
- }
- if (actualRotation > 90) {
- actualRotation = 180 - actualRotation;
- }
- var radian = Math.sin(actualRotation * Math.PI / 180);
- that.actualRotationImgW = parseInt(radian * (that.imgH) / 2);
- that.actualRotationImgH = parseInt(radian * (that.imgW) / 2);
- }
- }
- if (typeof that.options.onImgRotate == 'function')
- that.options.onImgRotate.call(that);
- },
- zoom: function (x) {
- var that = this;
- that.colorOnClick(true);
- var ratio = that.imgW / that.imgH;
- var newWidth = that.imgW + x;
- var newHeight = newWidth / ratio;
- var doPositioning = true;
- if (x == 0) {
- if (newWidth - that.objW < newHeight - that.objH) {
- newWidth = that.objW;
- newHeight = newWidth / ratio;
- } else {
- newHeight = that.objH;
- newWidth = ratio * newHeight;
- }
- }
- if (newWidth < that.objW || newHeight < that.objH) {
- doPositioning = false;
- }
- if (!that.options.scaleToFill && (newWidth > that.imgInitW || newHeight > that.imgInitH)) {
- doPositioning = false;
- }
- that.imgW = newWidth;
- that.img.width(newWidth);
- that.imgH = newHeight;
- that.img.height(newHeight);
- var newTop = parseInt(that.img.css('top')) - x / 2;
- var newLeft = parseInt(that.img.css('left')) - x / 2;
- that.actualRotationImgH = 0;
- that.actualRotationImgW = 0;
- if (that.actualRotation != 0) {
- var actualRotation = that.actualRotation % 360;
- if (actualRotation < 0) {
- actualRotation = 0 - actualRotation;
- }
- if (actualRotation == 90 || actualRotation == 270) {
- if (that.imgH > that.imgW) {
- that.actualRotationImgW = parseInt((that.imgH - that.imgW) / 2);
- } else if (that.imgH < that.imgW) {
- that.actualRotationImgH = parseInt((that.imgW - that.imgH) / 2);
- }
- } else if (actualRotation != 180 && actualRotation != 360) {
- if (actualRotation > 180) {
- actualRotation = actualRotation - 180;
- }
- if (actualRotation > 90) {
- actualRotation = 180 - actualRotation;
- }
- var radian = Math.sin(actualRotation * Math.PI / 180);
- that.actualRotationImgW = parseInt(radian * (that.imgH) / 2);
- that.actualRotationImgH = parseInt(radian * (that.imgW) / 2);
- }
- }
- if (newTop > -that.actualRotationImgH) {
- newTop = -that.actualRotationImgH;
- }
- if (newLeft > -that.actualRotationImgW) {
- newLeft = -that.actualRotationImgW;
- }
- var maxTop = -(newHeight - that.objH + that.actualRotationImgH);
- if (newTop < maxTop) {
- newTop = maxTop;
- }
- var maxLeft = -(newWidth - that.objW + that.actualRotationImgW);
- if (newLeft < maxLeft) {
- newLeft = maxLeft;
- }
- if (doPositioning) {
- that.img.css({'top': newTop, 'left': newLeft});
- }
- if (that.options.imgEyecandy) {
- that.imgEyecandy.width(newWidth);
- that.imgEyecandy.height(newHeight);
- if (doPositioning) {
- that.imgEyecandy.css({'top': newTop, 'left': newLeft});
- }
- }
- if (that.options.onImgZoom) that.options.onImgZoom.call(that);
- },
- crop: function () {
- var that = this;
- that.colorOnClick(true);
- if (that.options.onBeforeImgCrop) that.options.onBeforeImgCrop.call(that);
- that.cropControlsCrop.hide();
- that.showLoader();
- var cropData = {
- imgInitW: that.imgInitW,
- imgInitH: that.imgInitH,
- imgW: that.imgW,
- imgH: that.imgH,
- imgY1: parseInt(that.img.css('top')),
- imgX1: parseInt(that.img.css('left')),
- cropH: that.objH,
- cropW: that.objW,
- rotation: that.actualRotation,
- imgBackground: that.imgBackground
- };
- var formData = new FormData();
- for (var key in cropData) {
- if (cropData.hasOwnProperty(key)) {
- formData.append(key, cropData[key]);
- }
- }
- for (var key in that.options.cropData) {
- if (that.options.cropData.hasOwnProperty(key)) {
- formData.append(key, that.options.cropData[key]);
- }
- }
- if (that.imgName == '') {
- formData.append("imgUrl", that.convertBase64UrlToBlob(that.imgUrl));
- } else {
- formData.append("imgName", that.imgName);
- }
- var xhr = new XMLHttpRequest();
- xhr.open("POST", that.options.cropUrl);
- xhr.responseType = "blob";
- xhr.timeout = 60000 * 5;
- xhr.onload = function () {
- that.afterCrop(xhr);
- };
- xhr.send(formData);
- },
- convertBase64UrlToBlob: function (urlData) {
- var arr = urlData.split(',');
- var mime = arr[0].match(/:(.*?);/)[1];
- var bytes = window.atob(urlData.split(',')[1]); //去掉url的头,并转换为byte
- //处理异常,将ascii码小于0的转换为大于0
- var ab = new ArrayBuffer(bytes.length);
- var ia = new Uint8Array(ab);
- for (var i = 0; i < bytes.length; i++) {
- ia[i] = bytes.charCodeAt(i);
- }
- return new Blob([ab], {type: mime});
- },
- getFileMime: function (urlData) {
- var arr = urlData.split(',');
- return arr[0].match(/:(.*?);/)[1];
- },
- getFileExt: function (urlData) {
- var arr = urlData.split(',');
- var mime = arr[0].match(/:(.*?);/)[1];
- var FileExt;
- switch (mime) {
- case "image/jpeg":
- FileExt = "jpg";
- break;
- case "image/png":
- FileExt = "png";
- break;
- case "image/gif":
- FileExt = "gif";
- break;
- default:
- FileExt = "jpg";
- }
- return FileExt;
- },
- afterCrop: function (xhr) {
- var that = this;
- if (xhr.readyState === 4 && xhr.status === 200) {
- var Error = xhr.getResponseHeader("Content-My-Error");
- if (Error != null) {
- var ErrorMeg = decodeURIComponent(atob(Error).split('').map(function (c) {
- return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
- }).join(''));
- if (that.options.onError) that.options.onError.call(that, ErrorMeg);
- that.cropControlsCrop.show();
- that.hideLoader();
- return;
- }
- if (that.options.imgEyecandy)
- that.imgEyecandy.hide();
- var filename = xhr.getResponseHeader("Content-My-filename");
- var blob = xhr.response;
- var reader = new FileReader();
- reader.onload = function (e) {
- that.destroy();
- that.saveImgUrl = 'product_image_crop_md5,' + filename + ',' + e.target.result;
- var croppedImg = '<img class="croppedImg" src="' + e.target.result + '">';
- that.obj.append(croppedImg);
- if (that.options.outputUrlId !== '') {
- $('#' + that.options.outputUrlId).val(response.url);
- }
- that.croppedImg = that.obj.find('.croppedImg');
- that.croppedImg.width(that.objW + "px").height(that.objH + "px");
- that.init();
- that.hideLoader();
- that.imgUploadControl.hide();
- that.cropSaveControl.show();
- }
- reader.readAsDataURL(blob);
- } else {
- if (that.options.onError) that.options.onError.call(that, "处理失败,错误代码["+xhr.readyState+"]");
- that.hideLoader();
- that.cropControlsCrop.show();
- }
- if (that.options.onAfterImgCrop) that.options.onAfterImgCrop.call(that, response);
- },
- showLoader: function () {
- var that = this;
- that.obj.append(that.options.loaderHtml);
- that.loader = that.obj.find('.loader');
- },
- hideLoader: function () {
- var that = this;
- that.loader.remove();
- },
- reset: function () {
- var that = this;
- that.destroy();
- that.init();
- that.imgUploadControl.show();
- if (!$.isEmptyObject(that.croppedImg)) {
- that.obj.append(that.croppedImg);
- if (that.options.outputUrlId !== '') {
- $('#' + that.options.outputUrlId).val(that.croppedImg.attr('url'));
- }
- }
- if (typeof that.options.onReset == 'function')
- that.options.onReset.call(that);
- },
- destroy: function () {
- var that = this;
- that.colorOnClick(true);
- if (that.options.modal && !$.isEmptyObject(that.modal)) {
- that.destroyModal();
- }
- if (that.options.imgEyecandy && !$.isEmptyObject(that.imgEyecandy)) {
- that.destroyEyecandy();
- }
- if (!$.isEmptyObject(that.cropControlsUpload)) {
- that.cropControlsUpload.remove();
- }
- if (!$.isEmptyObject(that.cropControlsCrop)) {
- that.cropControlsCrop.remove();
- }
- if (!$.isEmptyObject(that.loader)) {
- that.loader.remove();
- }
- if (!$.isEmptyObject(that.form)) {
- that.form.remove();
- }
- that.obj.html('');
- },
- isAjaxUploadSupported: function () {
- var input = document.createElement("input");
- input.type = "file";
- return (
- "multiple" in input &&
- typeof File != "undefined" &&
- typeof FormData != "undefined" &&
- typeof (new XMLHttpRequest()).upload != "undefined");
- },
- CreateFallbackIframe: function () {
- var that = this;
- if (!that.isAjaxUploadSupported()) {
- if (jQuery.isEmptyObject(that.iframeobj)) {
- var iframe = document.createElement("iframe");
- iframe.setAttribute("id", that.id + "_upload_iframe");
- iframe.setAttribute("name", that.id + "_upload_iframe");
- iframe.setAttribute("width", "0");
- iframe.setAttribute("height", "0");
- iframe.setAttribute("border", "0");
- iframe.setAttribute("src", "javascript:false;");
- iframe.style.display = "none";
- document.body.appendChild(iframe);
- } else {
- iframe = that.iframeobj[0];
- }
- var myContent = '<!DOCTYPE html>'
- + '<html><head><title>Uploading File</title></head>'
- + '<body>'
- + '<form '
- + 'class="' + that.id + '_upload_iframe_form" '
- + 'name="' + that.id + '_upload_iframe_form" '
- + 'action="' + that.options.uploadUrl + '" method="post" '
- + 'enctype="multipart/form-data" encoding="multipart/form-data" style="display:none;">'
- + $("#" + that.id + '_imgUploadField')[0].outerHTML
- + '</form></body></html>';
- iframe.contentWindow.document.open('text/htmlreplace');
- iframe.contentWindow.document.write(myContent);
- iframe.contentWindow.document.close();
- that.iframeobj = $("#" + that.id + "_upload_iframe");
- that.iframeform = that.iframeobj.contents().find("html").find("." + that.id + "_upload_iframe_form");
- that.iframeform.on("change", "input", function () {
- that.SubmitFallbackIframe(that);
- });
- that.iframeform.find("input")[0].attachEvent("onchange", function () {
- that.SubmitFallbackIframe(that);
- });
- var eventHandlermyFile = function () {
- if (iframe.detachEvent)
- iframe.detachEvent("onload", eventHandlermyFile);
- else
- iframe.removeEventListener("load", eventHandlermyFile, false);
- var response = that.getIframeContentJSON(iframe);
- if (jQuery.isEmptyObject(that.modal)) {
- that.afterUpload(response);
- }
- }
- if (iframe.addEventListener)
- iframe.addEventListener("load", eventHandlermyFile, true);
- if (iframe.attachEvent)
- iframe.attachEvent("onload", eventHandlermyFile);
- return "#" + that.id + '_imgUploadField';
- } else {
- return "";
- }
- },
- SubmitFallbackIframe: function (that) {
- that.showLoader();
- if (that.options.processInline && !that.options.uploadUrl) {
- if (that.options.onError) {
- that.options.onError.call(that, "processInline is not supported by your browser ");
- that.hideLoader();
- }
- } else {
- if (that.options.onBeforeImgUpload) that.options.onBeforeImgUpload.call(that);
- that.iframeform[0].submit();
- }
- },
- getIframeContentJSON: function (iframe) {
- try {
- var doc = iframe.contentDocument ? iframe.contentDocument : iframe.contentWindow.document,
- response;
- var innerHTML = doc.body.innerHTML;
- if (innerHTML.slice(0, 5).toLowerCase() == "<pre>" && innerHTML.slice(-6).toLowerCase() == "</pre>") {
- innerHTML = doc.body.firstChild.firstChild.nodeValue;
- }
- response = jQuery.parseJSON(innerHTML);
- } catch (err) {
- response = {success: false};
- }
- return response;
- },
- hexadecimal: function (num) {
- var r = parseInt(num).toString(16);
- if (r.length == 1) {
- return '0' + r;
- }
- return r.toUpperCase();
- }
- };
- })(window, document);
|