diff options
Diffstat (limited to 'public/assets/js/vendor')
| -rw-r--r-- | public/assets/js/vendor/renderToCanvas.js | 75 | ||||
| -rw-r--r-- | public/assets/js/vendor/view/uploadview.js | 28 |
2 files changed, 100 insertions, 3 deletions
diff --git a/public/assets/js/vendor/renderToCanvas.js b/public/assets/js/vendor/renderToCanvas.js index 376e61a..f223b02 100644 --- a/public/assets/js/vendor/renderToCanvas.js +++ b/public/assets/js/vendor/renderToCanvas.js @@ -8,8 +8,9 @@ function renderToCanvas(img, options) { var ctx = canvas.getContext('2d') var initialScale = options.scale || 1 // Scale to needed to constrain canvas to max size - var scale = getScale(img.width * initialScale, - img.height * initialScale, maxSize, maxSize) + // var scale = getScale(img.width * initialScale, + // img.height * initialScale, maxSize, maxSize) + var scale = 1 // Still need to apply the user defined scale scale *= initialScale var width = canvas.width = Math.round(img.width * scale) @@ -104,6 +105,17 @@ function renderToCanvas(img, options) { } } +var orientationToTransform = { + 1: { rotation: 0, mirror: false }, + 2: { rotation: 0, mirror: true }, + 3: { rotation: 180, mirror: false }, + 4: { rotation: 180, mirror: true }, + 5: { rotation: 90, mirror: true }, + 6: { rotation: 90, mirror: false }, + 7: { rotation: 270, mirror: true }, + 8: { rotation: 270, mirror: false } +} + function base64ToUint8Array(string, start, finish) { var start = start || 0 var finish = finish || string.length @@ -115,3 +127,62 @@ function base64ToUint8Array(string, start, finish) { } return buffer } + +var dataUriToUint8Array = function(uri){ + var data = uri.split(',')[1]; + var bytes = atob(data); + var buf = new ArrayBuffer(bytes.length); + var u8 = new Uint8Array(buf); + for (var i = 0; i < bytes.length; i++) { + u8[i] = bytes.charCodeAt(i); + } + return u8 +} + +window.dataUriToBlob = (function(){ + /** + * Blob constructor. + */ + + var Blob = window.Blob; + + /** + * ArrayBufferView support. + */ + + var hasArrayBufferView = new Blob([new Uint8Array(100)]).size == 100; + + /** + * Return a `Blob` for the given data `uri`. + * + * @param {String} uri + * @return {Blob} + * @api public + */ + + var dataUriToBlob = function(uri){ + var data = uri.split(',')[1]; + var bytes = atob(data); + var buf = new ArrayBuffer(bytes.length); + var arr = new Uint8Array(buf); + for (var i = 0; i < bytes.length; i++) { + arr[i] = bytes.charCodeAt(i); + } + + if (!hasArrayBufferView) arr = buf; + var blob = new Blob([arr], { type: mime(uri) }); + blob.slice = blob.slice || blob.webkitSlice; + return blob; + }; + + /** + * Return data uri mime type. + */ + + function mime(uri) { + return uri.split(';')[0].slice(5); + } + + return dataUriToBlob; + +})() diff --git a/public/assets/js/vendor/view/uploadview.js b/public/assets/js/vendor/view/uploadview.js index 436f4c8..fd8b085 100644 --- a/public/assets/js/vendor/view/uploadview.js +++ b/public/assets/js/vendor/view/uploadview.js @@ -29,11 +29,37 @@ var UploadView = View.extend({ continue; } - this.upload(f) + if (is_mobile && f.type.match(/jpg|jpeg/)) { + this.fixOrientationAndUpload(f) + } + else { + this.upload(f) + } // this.getImageDimensions(f) } }, + fixOrientationAndUpload: function(f){ + var reader = new FileReader(); + var img = new Image () + + reader.addEventListener("load", function () { + img.src = reader.result + }, false) + + img.onload = function(){ + var canvas = renderToCanvas(img, { + correctOrientation: true, + scale: 1 + }) + var dataURI = canvas.toDataURL("image/jpeg", 0.8) + var blob = dataUriToBlob( dataURI ) + this.upload(blob) + }.bind(this) + + reader.readAsDataURL(f) + }, + /* getImageDimensions: function(f){ var base = this |
