Home  >  Article  >  Web Front-end  >  How to Extract EXIF Orientation Data from a JPEG File Using JavaScript?

How to Extract EXIF Orientation Data from a JPEG File Using JavaScript?

Linda Hamilton
Linda HamiltonOriginal
2024-11-02 11:34:02824browse

How to Extract EXIF Orientation Data from a JPEG File Using JavaScript?

Accessing JPEG EXIF Rotation Data on the Client Side with JavaScript

The ability to rotate photos based on their original orientation, as captured by the camera and stored in JPEG EXIF data, is essential for ensuring proper display. This can be achieved entirely on the client side using JavaScript and the element.

How to Extract EXIF Orientation Data in JavaScript

To access EXIF orientation data, JavaScript can utilize methods that enable the reading of local file API objects, local images (), or remote images (). One such method is the FileReader object, which allows the reading of files as arrays.

Here's a specific function that leverages FileReader to extract the orientation tag from a JPEG file:

<code class="javascript">function getOrientation(file, callback) {
  var reader = new FileReader();
  reader.onload = function(e) {
    var view = new DataView(e.target.result);

    // Check for "SOI" ("Start of Image") marker
    if (view.getUint16(0, false) != 0xFFD8) return callback(-2);

    // Calculate offset to APP1 marker
    var length = view.byteLength, offset = 2;
    while (offset < length) {
      if (view.getUint16(offset+2, false) <= 8) return callback(-1);
      var marker = view.getUint16(offset, false);
      offset += 2;

      // Check for APP1 marker
      if (marker == 0xFFE1) {
        // Check for "Exif" signature
        if (view.getUint32(offset += 2, false) != 0x45786966) return callback(-1);

        var little = view.getUint16(offset += 6, false) == 0x4949;
        offset += view.getUint32(offset + 4, little);
        var tags = view.getUint16(offset, little);
        offset += 2;

        // Search for Orientation tag
        for (var i = 0; i < tags; i++) {
          if (view.getUint16(offset + (i * 12), little) == 0x0112) {
            return callback(view.getUint16(offset + (i * 12) + 8, little));
          }
        }
      }
      else if ((marker &amp; 0xFF00) != 0xFF00) {
        break;
      }
      else {
        offset += view.getUint16(offset, false);
      }
    }
    return callback(-1);
  };

  reader.readAsArrayBuffer(file);
}

Example Usage

To use the provided function, you can utilize the input event of a file input element:

<code class="javascript">var input = document.getElementById('input');
input.onchange = function(e) {
  getOrientation(input.files[0], function(orientation) {
    alert('orientation: ' + orientation);
  });
}

HTML

<code class="html"><input id='input' type='file' /></code>

The above is the detailed content of How to Extract EXIF Orientation Data from a JPEG File Using JavaScript?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn