Sha256: 676952d142f029d771059f45e243b043810800f4a0e5d0a6ae8e8a47d373823d

Contents?: true

Size: 614 Bytes

Versions: 2

Compression:

Stored size: 614 Bytes

Contents

require 'file_data/file_types/jpeg'
require_relative 'exif_stream'

module FileData
  # Retrieves an ExifStream from a jpeg stream
  class ExifJpeg
    APP1_BYTES = [255, 225].freeze
    EXIF_ID = "Exif\0\0".bytes.to_a.freeze

    def initialize(stream)
      @stream = stream
    end

    def exif
      ExifStream.new(@stream) if seek_exif
    end

    def seek_exif
      Jpeg.new(@stream).each_section
          .select { |marker, _| exif_section?(marker) }
          .first
    end

    def exif_section?(marker)
      marker == APP1_BYTES && @stream.each_byte.take(EXIF_ID.size) == EXIF_ID
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
file_data-5.0.0 lib/file_data/formats/exif/exif_jpeg.rb
file_data-4.0.0 lib/file_data/formats/exif/exif_jpeg.rb