Home > Web Front-end > JS Tutorial > body text

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

Linda Hamilton
Release: 2024-11-02 11:34:02
Original
823 people have browsed it

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);
}
Copy after login

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);
  });
}
Copy after login

HTML

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

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!

source:php.cn
Statement of this Website
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
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!