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