MCPcopy Create free account
hub / github.com/TruthHun/BookStack / getOrientation

Function getOrientation

static/cropper/2.3.4/cropper.js:320–393  ·  view source on GitHub ↗
(arrayBuffer)

Source from the content-addressed store, hash-verified

318 }
319
320 function getOrientation(arrayBuffer) {
321 var dataView = new DataView(arrayBuffer);
322 var length = dataView.byteLength;
323 var orientation;
324 var exifIDCode;
325 var tiffOffset;
326 var firstIFDOffset;
327 var littleEndian;
328 var endianness;
329 var app1Start;
330 var ifdStart;
331 var offset;
332 var i;
333
334 // Only handle JPEG image (start by 0xFFD8)
335 if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) {
336 offset = 2;
337
338 while (offset < length) {
339 if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) {
340 app1Start = offset;
341 break;
342 }
343
344 offset++;
345 }
346 }
347
348 if (app1Start) {
349 exifIDCode = app1Start + 4;
350 tiffOffset = app1Start + 10;
351
352 if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') {
353 endianness = dataView.getUint16(tiffOffset);
354 littleEndian = endianness === 0x4949;
355
356 if (littleEndian || endianness === 0x4D4D /* bigEndian */) {
357 if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) {
358 firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian);
359
360 if (firstIFDOffset >= 0x00000008) {
361 ifdStart = tiffOffset + firstIFDOffset;
362 }
363 }
364 }
365 }
366 }
367
368 if (ifdStart) {
369 length = dataView.getUint16(ifdStart, littleEndian);
370
371 for (i = 0; i < length; i++) {
372 offset = ifdStart + i * 12 + 2;
373
374 if (dataView.getUint16(offset, littleEndian) === 0x0112 /* Orientation */) {
375
376 // 8 is the offset of the current tag's value
377 offset += 8;

Callers 1

cropper.jsFile · 0.85

Calls 1

getStringFromCharCodeFunction · 0.85

Tested by

no test coverage detected