ImageOrientationFix.min_wev8.js 2.19 KB
var ImageOrientationFix=function(f){var e={image:"",imgType:"url",onFix:function(i){}};var c={};var a="";$.extend(e,f);function g(m){var j=m.naturalWidth,r=m.naturalHeight;var i=document.createElement("canvas");i.width=1;i.height=r;var s=i.getContext("2d");s.drawImage(m,0,0);var l=s.getImageData(0,0,1,r).data;var p=0;var n=r;var q=r;while(q>p){var k=l[(q-1)*4+3];if(k===0){n=q}else{p=q}q=(n+p)>>1}var o=(q/r);return(o===0)?1:o}function d(q,j,o,n,p,k,s,r,i,m){var l=g(j);q.drawImage(j,o*l,n*l,p*l,k*l,s,r,i,m)}var h={init:function(){if(!(navigator.userAgent.match(/iPhone/i)||navigator.userAgent.match(/iPad/i))){e.onFix(e.image);return}var j=new Image();var i=this;a=j;j.onload=function(){EXIF.getData(this,function(){c=EXIF.getAllTags(this);i.__fix()})};if(e.imgType=="image"){j.src=$(e.image).attr("src")}else{j.src=e.image}},__fix:function(){var n={width:a.naturalWidth,height:a.naturalHeight,transX:0,transY:0,XDimension:0,YDimension:0,Orientation:1};n.Orientation=c.Orientation;if(n.Orientation==undefined){n.Orientation=1}var p=0;var r=0;if(n.Orientation!=1){n.transX=parseInt(n.width/2);n.transY=parseInt(n.height/2)}else{n.transX=0;n.transY=0}p=a.width;r=a.height;var o=c["PixelXDimension"];var k=c["PixelYDimension"];n.XDimension=o;n.YDimension=k;var q=document.createElement("canvas");q.width=n.width;q.height=n.height;var l=q.getContext("2d");l.clearRect(0,0,q.width,q.height);d(l,a,0,0,p,r,0,0,p,r);var m=document.createElement("canvas");var j=m.getContext("2d");switch(n.Orientation){case 8:p=k;r=o;m.width=p;m.height=r;j.translate(parseInt(p/2),parseInt(r/2));j.rotate(-0.5*Math.PI);j.drawImage(q,0,0,q.width,q.height,0-n.transX,0-n.transY,q.width,q.height);break;case 3:p=o;r=k;m.width=p;m.height=r;j.translate(parseInt(p/2),parseInt(r/2));j.rotate(Math.PI);j.drawImage(q,0,0,q.width,q.height,0-n.transX,0-n.transY,q.width,q.height);break;case 6:p=k;r=o;m.width=p;m.height=r;j.translate(parseInt(p/2),parseInt(r/2));j.rotate(0.5*Math.PI);j.drawImage(q,0,0,q.width,q.height,0-n.transX,0-n.transY,q.width,q.height);break;case 1:m.width=p;m.height=r;j.drawImage(q,0,0,p,r,0-n.transX,0-n.transY,q.width,q.height);break}var i=m.toDataURL("image/jpeg");e.onFix(i);return}};h.init();var b={getExif:function(){return c}};return b};