|
1 | 1 | /*!
|
2 |
| - * Cropper.js v1.4.2 |
| 2 | + * Cropper.js v1.4.3 |
3 | 3 | * https://fengyuanchen.github.io/cropperjs
|
4 | 4 | *
|
5 | 5 | * Copyright 2015-present Chen Fengyuan
|
6 | 6 | * Released under the MIT license
|
7 | 7 | *
|
8 |
| - * Date: 2018-10-15T13:27:01.969Z |
| 8 | + * Date: 2018-10-24T13:07:15.032Z |
9 | 9 | */
|
10 | 10 |
|
11 | 11 | (function (global, factory) {
|
|
999 | 999 |
|
1000 | 1000 | function resetAndGetOrientation(arrayBuffer) {
|
1001 | 1001 | var dataView = new DataView(arrayBuffer);
|
1002 |
| - var orientation; |
1003 |
| - var littleEndian; |
1004 |
| - var app1Start; |
1005 |
| - var ifdStart; // Only handle JPEG image (start by 0xFFD8) |
1006 |
| - |
1007 |
| - if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) { |
1008 |
| - var length = dataView.byteLength; |
1009 |
| - var offset = 2; |
1010 |
| - |
1011 |
| - while (offset < length) { |
1012 |
| - if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) { |
1013 |
| - app1Start = offset; |
1014 |
| - break; |
1015 |
| - } |
| 1002 | + var orientation; // Ignores range error when the image does not have correct Exif information |
| 1003 | + |
| 1004 | + try { |
| 1005 | + var littleEndian; |
| 1006 | + var app1Start; |
| 1007 | + var ifdStart; // Only handle JPEG image (start by 0xFFD8) |
| 1008 | + |
| 1009 | + if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) { |
| 1010 | + var length = dataView.byteLength; |
| 1011 | + var offset = 2; |
1016 | 1012 |
|
1017 |
| - offset += 1; |
| 1013 | + while (offset + 1 < length) { |
| 1014 | + if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) { |
| 1015 | + app1Start = offset; |
| 1016 | + break; |
| 1017 | + } |
| 1018 | + |
| 1019 | + offset += 1; |
| 1020 | + } |
1018 | 1021 | }
|
1019 |
| - } |
1020 | 1022 |
|
1021 |
| - if (app1Start) { |
1022 |
| - var exifIDCode = app1Start + 4; |
1023 |
| - var tiffOffset = app1Start + 10; |
| 1023 | + if (app1Start) { |
| 1024 | + var exifIDCode = app1Start + 4; |
| 1025 | + var tiffOffset = app1Start + 10; |
1024 | 1026 |
|
1025 |
| - if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') { |
1026 |
| - var endianness = dataView.getUint16(tiffOffset); |
1027 |
| - littleEndian = endianness === 0x4949; |
| 1027 | + if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') { |
| 1028 | + var endianness = dataView.getUint16(tiffOffset); |
| 1029 | + littleEndian = endianness === 0x4949; |
1028 | 1030 |
|
1029 |
| - if (littleEndian || endianness === 0x4D4D |
1030 |
| - /* bigEndian */ |
1031 |
| - ) { |
1032 |
| - if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) { |
1033 |
| - var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian); |
| 1031 | + if (littleEndian || endianness === 0x4D4D |
| 1032 | + /* bigEndian */ |
| 1033 | + ) { |
| 1034 | + if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) { |
| 1035 | + var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian); |
1034 | 1036 |
|
1035 |
| - if (firstIFDOffset >= 0x00000008) { |
1036 |
| - ifdStart = tiffOffset + firstIFDOffset; |
| 1037 | + if (firstIFDOffset >= 0x00000008) { |
| 1038 | + ifdStart = tiffOffset + firstIFDOffset; |
| 1039 | + } |
1037 | 1040 | }
|
1038 | 1041 | }
|
1039 |
| - } |
| 1042 | + } |
1040 | 1043 | }
|
1041 |
| - } |
1042 | 1044 |
|
1043 |
| - if (ifdStart) { |
1044 |
| - var _length = dataView.getUint16(ifdStart, littleEndian); |
| 1045 | + if (ifdStart) { |
| 1046 | + var _length = dataView.getUint16(ifdStart, littleEndian); |
1045 | 1047 |
|
1046 |
| - var _offset; |
| 1048 | + var _offset; |
1047 | 1049 |
|
1048 |
| - var i; |
| 1050 | + var i; |
1049 | 1051 |
|
1050 |
| - for (i = 0; i < _length; i += 1) { |
1051 |
| - _offset = ifdStart + i * 12 + 2; |
| 1052 | + for (i = 0; i < _length; i += 1) { |
| 1053 | + _offset = ifdStart + i * 12 + 2; |
1052 | 1054 |
|
1053 |
| - if (dataView.getUint16(_offset, littleEndian) === 0x0112 |
1054 |
| - /* Orientation */ |
1055 |
| - ) { |
1056 |
| - // 8 is the offset of the current tag's value |
1057 |
| - _offset += 8; // Get the original orientation value |
| 1055 | + if (dataView.getUint16(_offset, littleEndian) === 0x0112 |
| 1056 | + /* Orientation */ |
| 1057 | + ) { |
| 1058 | + // 8 is the offset of the current tag's value |
| 1059 | + _offset += 8; // Get the original orientation value |
1058 | 1060 |
|
1059 |
| - orientation = dataView.getUint16(_offset, littleEndian); // Override the orientation with its default value |
| 1061 | + orientation = dataView.getUint16(_offset, littleEndian); // Override the orientation with its default value |
1060 | 1062 |
|
1061 |
| - dataView.setUint16(_offset, 1, littleEndian); |
1062 |
| - break; |
1063 |
| - } |
| 1063 | + dataView.setUint16(_offset, 1, littleEndian); |
| 1064 | + break; |
| 1065 | + } |
| 1066 | + } |
1064 | 1067 | }
|
| 1068 | + } catch (e) { |
| 1069 | + orientation = 1; |
1065 | 1070 | }
|
1066 | 1071 |
|
1067 | 1072 | return orientation;
|
|
0 commit comments